用VB做波形显示遇到了瓶颈,求易做图相助!
我想用VB做一个波形显示器,它的显示方式是先在黑背景下显示一段波形,当波形填充完整个区域后,后面的数据就会从右开始刷新以前的数据,刷新的方式是用pset花的点,先抹去上一场的波形,抹去上一场的波形的方式是将上一场波形的坐标点上过去的颜色(在画上一场波形的时候已经将该点的颜色保存下来了,其实就是背景颜色)替换掉波形的颜色,然后画上这一场的波形,我的代码在下面,可是我遇到了一个瓶颈,当我抹去过去的波形,填上颜色的时候总是有缺口,背景中的一些线总是被切断,求高手相助!!!Option Explicit
Dim TX(800) As Integer, TX_ago(800) As Long
Dim TX_xb As Integer, TX_cal As Integer, TY As Integer
Dim gallery0_cankao As Integer
Private Sub Form_Load()
Call clear_form
Call load_picture
Call load_others
End Sub
Public Function load_others()
Timer1.Enabled = False
'ReDim TX(0 To Picture1.ScaleWidth)
End Function
Public Function load_picture()
Dim CX, CY, F, i
Picture1.ScaleMode = 3
Picture1.DrawWidth = 1
Picture1.ScaleWidth = 800
Picture1.ScaleHeight = 400
Debug.Print Picture1.ScaleWidth
Debug.Print Picture1.ScaleHeight
Picture1.BackColor = vbBlack
For i = 1 To 20
F = i / 20
CX = F * Picture1.ScaleWidth
CY = F * Picture1.ScaleHeight
Picture1.Line (CX, 0)-(CX, Picture1.ScaleHeight), RGB(35, 35, 35) '列
Picture1.Line (0, CY)-(Picture1.ScaleWidth, CY), RGB(35, 35, 35) '行
Next
End Function
Private Function clear_form()
Dim i As Integer
For i = 0 To 200
Debug.Print
Next
End Function
Public Function point_set(X As Integer, Y As Integer)
Picture1.PSet (Val(X), Val(Y)), vbBlue
End Function
Public Function point_clear(X As Integer, Y As Integer, Color As Long)
Picture1.PSet (Val(X), Val(Y)), Color
End Function
Public Function cankaoxian(i As Integer)
Dim CX, CY
CX = Picture1.ScaleWidth
CY = Picture1.ScaleHeight
Picture1.Line (0, i)-(CX, i), vbRed
End Function
Private Sub Gallery0_start_Click()
gallery0_cankao = 200
Call cankaoxian(gallery0_cankao)
Timer1.Enabled = True
End Sub
Private Sub Gallery0_stop_Click()
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
Dim i As Integer, a As Integer, temp As Long
i = TX_cal Mod Picture1.ScaleWidth
TX_cal = TX_cal + 1
TY = 60 * Cos(TX_cal * 3.1415 / 180) + 60 * Sin(3 * TX_cal * 3.1415 / 180) + gallery0_cankao
temp = Int(TX_cal / Picture1.ScaleWidth)
If temp <> 0 Then
Call point_clear(i, TX(i), TX_ago(i))
End If
temp = Picture1.Point(i, TY)
If temp <> -1 Then
TX_ago(i) = temp
Else
TX_ago(i) = 0
End If
TX(i) = TY
Call point_set(i, TY)
End Sub
--------------------编程问答-------------------- “背景线被切断”是主要是因为显示器(三原色)的原因造成的视觉问题吧。
如果你用白色来画波形,或背景色用白色,你就会觉得显示状态好得多了。
还有一个建议,在Function load_picture()中:
Picture1.ScaleWidth = 800
Picture1.ScaleHeight = 400
这两句最好别用,你应该在设计时,把Picture1的.ScaleMode直接选成3
然后直接输入它的Height和Width值,使它的ScaleHeight变为400,ScaleWidth变为800。
--------------------编程问答-------------------- 一个动态绘制正弦波形图的程序例子 --------------------编程问答-------------------- 谢谢1楼,我按照你说的“直接输入它的Height和Width值,使它的ScaleHeight变为400,ScaleWidth变为800”背景线就再也没有出现被截断的情况了,顺便问一下:在直接设置ScaleHeight和ScaleWidth和“直接输入它的Height和Width值”有什么区别吗?(我是新手,请多多关照!嘿嘿~~) --------------------编程问答--------------------
我花了一天时间研究了一下你给的程序,我想用画笔的方式来设置画出来的线的颜色和粗细,
hpen = CreatePen(PS_SOLID, 4, vbBlue)
lngK = GetTickCount
MoveToEx lngMemoryDC, lngX, dblY, ByVal 0&
lngX = lngX + 1
dblY = (0.45 * H * Sin(K * lngX) + 0.5 * H)
SelectObject lngMemoryDC, hpen
lngP = LineTo(lngMemoryDC, lngX, dblY)
hpen = CreatePen(PS_SOLID, 4, vbBlue)和SelectObject lngMemoryDC, hpen是自己添加的,PS_SOLID是常量,但调试的时候怎么报错“PS_SOLID没定义”?而且我直接用1代替了PS_SOLID之后,不管我怎么调整画笔的颜色,画出来的线都是黑色的,但调整粗细在画图的时候却可以表现出来? --------------------编程问答-------------------- 想绘制不同颜色的曲线,且要有好的图画效果,建议你使用GDI+,功能比GDI强大很多,也容易实现的多。
--------------------编程问答--------------------
建议不用背景色划线的方式清除上一屏,而是重新初始化背景色以及其他必要的标签等。
--------------------编程问答--------------------
不是用背景色吧...... --------------------编程问答--------------------
我正在看GDI+ 不过我还是很想弄懂,为什么把画笔颜色改变了,在画图的时候图像效果却没有变化? --------------------编程问答-------------------- http://download.csdn.net/detail/veron_04/4039695
http://download.csdn.net/detail/veron_04/4237285
建议你用tlb的方式,简单方便。 --------------------编程问答--------------------
这个我都下了,在看教程的时候我死活也没能在VB6.0里找到GDI+,例子里面的程序我一个也没能跑起来,易做图,请问一下怎么给自己的VB加载GDI+? --------------------编程问答-------------------- 把GdiPlus.tlb放到system32下即可 --------------------编程问答-------------------- 绘制动态折线图的VB6源代码。支持超过上下限变颜色和数据点显示。
http://download.csdn.net/detail/zhao4zhong1/1987571 --------------------编程问答--------------------
谢谢你,我已经弄好了 --------------------编程问答--------------------
谢谢你,我已经弄好了 --------------------编程问答-------------------- http://www.m5home.com/bak_blog/article/282.html
参考这个波形显示例子:)
补充:VB , 控件