VB程序员博客
picturebox.line 的画图速度是不是很慢啊?
我从串口中(下位机发送)每隔500ms接收一组数据存下来(约500多个),然后用 .line(x1,y1)-(x2,y2)画图,显示不正常,偶尔显示出来了一屏,过了好久不定时的会更新一屏,不知道是不是因为vb画图速度慢的原因?还是串口的原因?
串口是9600,8位,无校验位,1停止位。 inputlen=3, 接收到3个字节后事件触发,接收方式为二进制。(下位机发送的命令格式为3个字节:1个前导命令符,数据低8位,数据高8位)
Public worktime As Integer
Public timecnt '秒计数器
Dim cqstart, cqdly1, cqdly2, cqdly3
Dim maibo, DS
Dim first
Dim adbuf(1024) ', data 'ad数据缓冲数组, 接收缓冲数组
Dim data() As Byte '接收缓冲数组
Dim num 'ad 数据个数计数器
—————————————————–
Private Sub Form_Load()
maibo = 0
DS = 0#
first = 1
num = 0
MSComm1.PortOpen = True
End Sub
—————————–
Private Sub MSComm1_OnComm() '串口程序
Select Case MSComm1.CommEvent
Case comEvReceive '接收到1数据
data = MSComm1.Input '取出3个字节缓冲
MSComm1.InBufferCount = 0 '清除缓冲
Select Case Chr(data(0)) '命令符号
Case "B" '是缓冲数据
If num < 1024 Then
adbuf(num) = data(1) + data(2) * 256 '2个8位合成一个16位
num = num + 1
End If
'————————————————————-
Case "C" '缓冲区数据接收结束
Call draw '画波形
MSComm1.InBufferCount = 0 '清除缓冲
num = 0
'————————————————————-
Case "D" '是d/s比
DS = data(1) + data(2) * 256 '2个8位合成一个16位
'dsText.Text = DS '显示
dsText.Text = DS / 100 '显示
'————————————————————-
Case "M" '是脉搏
maibo = data(1) + data(2) * 256 '2个8位合成一个16位
maiboText.Text = maibo '显示
'————————————————————-
Case "Y" '是cqSTART延时时间
cqstart = data(1) '返回cqSTART延时时间
cqstartText.Text = cqstart '显示
End Select
End Select
End Sub
————————————
'—–绘制指脉曲线———————
Sub draw()
picturemb.Cls
picturemb.DrawWidth = 1
picturemb.BackColor = QBColor(15)
picturemb.Scale (0, 1024)-(num + 1, 0) 'x,y坐标
For i = 1 To num - 1
X1 = (i - 1)
Y1 = adbuf(i - 1)
X2 = i
Y2 = adbuf(i)
picturemb.Line (X1, Y1)-(X2, Y2), QBColor(0)
Next i
End Sub
建议使用API,如polyline,polygon等。
ding…
500ms????即使来得及画,你的眼睛来得及看吗?
500ms足够了,时间是没有问题的,解决方法有两种(当然AutoRedraw=True):
1、画线时将picture的Visible属性置成False,画完再置成True,Picture只重绘一次。
2、将曲线图像用PaintPicture方法,将图像向左移一个单位,清除最右一个单位的内容,再用画线方法画最右一个单位,Picture重绘三次。
还有另一种能让你看到图的方法
3、在画线时的For Next循环中,加入DoEvents语句,这样可以保证你眼睛能看到图,但不保证不闪,哈哈。
标签: , picturebox, 画图, 速度