在VB中绘制实时曲线是比较难的,一般要应用第三方控件或是Windows API函数来完成,但是如果你对实时曲线的要求不是很高,只要能表示出当前的一般情况的话,我们可以直接应用VB提供给我们的空间来完成.
原则上讲,直接在Form里绘制曲线都是可以的,MSDN上面很多例程就是直接在Form里面绘制图形的,Form作为绘制图形的容器,不过一般应用中Form中不可避免的会有很多其他控件,所以我们选择PictureBox作为绘制曲线的容器.
实时曲线的绘制一般借助于Timer控件来完成,使用Timer控件,定期将串口或是其他仪器中监测到的数据送往PictureBox1,而曲线的绘制一般画成折线图,采用PictureBox1的Line方法绘制.具体实现如下:
1.选择需要显示的窗体Picture1,加入图片框Picture1,根据实际需要设置图片的大小并移到合适的位置,并在图片的外面画好量程----时间坐标系;然后加上Timer控件以及两个CommandButton,界面就基本设置好了.
2.建立坐标系,根据Picture1的大小和高度设置画出坐标系的X轴和Y轴:
Picture1 .ScaleMode = 1 ‘以VB的基本单位作为建立坐标轴以及绘制图形的单位;
Picture1.Refresh
Picture1.CurrentX = Picture1.ScaleLeft +100
Picture1.CurrentY = Picture1.ScaleTop
Picture1.Print Picture1.ScaleHeight - 100
Picture1.Line(Picture1.ScaleLeft+100,Picture1.ScaleTop+100)-(Picture1.ScaleLeft+100, Picture1.ScaleHeight - 100)
Picture1.CurrentX = Picture1.ScaleLeft +100
Picture1.CurrentY = Picture1.ScaleHeight
Picture1.Print “(0,0)”
Picture1.Line (Picture1.ScaleLeft + 100, Picture1.ScaleHeight - 100)-(Picture1.ScaleWidth - 100, Picture1.ScaleHeight - 100)
Picture1.CurrentX = Picture1.ScaleWidth
Picture1.CurrentY = Picture1.ScaleHeight
Picture1.Print Picture1.ScaleWidth-100
Picture1.AutoRedraw = True ‘必要时,用存储在内存中的图象进行重绘
3.绘制曲线并保存,我们这里以正弦曲线作为绘制曲线的数据来源,具体应用是可以采用由串口或其他仪器采集得到的数据.首先我们绘制一条中线,然后在Timer控件的Time事件中绘制曲线:
Picture1.Line (Picture1.ScaleLeft, CInt(Picture1.ScaleHeight / 2))-(Picture1.ScaleWidth, CInt(Picture1.ScaleHeight / 2)) ‘绘制中线
Private Sub Timer1_Timer()
Dim y1 As Integer
y1 = CInt(Sin((x - Picture1.Left) / 20 / 180 * pi) * Picture1.ScaleHeight / 2)
y1 = CInt((Picture1.ScaleHeight + 1000) / 2) - y1
Picture1.Line (x, y)-(x + 20, y1)
x = x + 20
y = y1
If x >= Picture1.ScaleWidth Then
SavePicture Picture1.Image, "c:/sin.bmp" ‘保存图画,可以根据实际需要命名图片
x = 0
y = Picture1.ScaleHeight / 2
Picture1.Cls‘清屏重画
End If
End Sub
从上面的过程可以看出,其实对于要求不高的实时曲线的绘制还是比较简单的,在这里我采用的是清屏重画图像,如果要实现图像往左移动,图像仍然保留的效果,可以采用Windows的Bitblt函数,可以让图像每次移动一个象素或是多少个twip,具体实现可以参见<<应用VB4.0实现工业控制的实时曲线和历史曲线>>( http://www.swm.com.cn/yingyong/rj-98-yy4/98-y4-yy6.htm).
以上只是实时曲线绘制的一点简单说明,具体应用中可能需要花更多的功夫修饰图像,显示时间(可以依据上面的代码中的Picture1.Print实现),但是基本原理大同小异.
分享到:
相关推荐
基于python实现串口通讯,从串口读取数据后进行动态曲线绘制,然后将数据保存到文件中,曲线绘制可实现暂停
基于python实现串口通讯,从串口读取数据后进行动态曲线绘制,然后将数据保存到文件中,曲线绘制可实现暂停.zip
QChart 绘制饼状图、曲线、条形图,并保存曲线图形
delphi前两年编写的程序,有静态曲线的绘制,后来还做过一些动态曲线的绘制,如果有需要的,小弟愿意与大家分享,欢迎留言,我会及时发到你的邮箱里。
# Python使用matplotlib绘制动态正弦曲线图 保存为gif动图 1. 使用matplotlib绘制正弦曲线; 2. 逐帧前进形成动画,可在界面显示也可保存为gif动画。
1、实时解析串口数据并绘制相关曲线 | 2、串口单独一个进程(不影响GUI刷新) | 3、曲线、串口参数可配置、可保存
很好的采集数据实时画图程序,可以实时画温湿度曲线,波特率115200,可以改,自己写的,如有问题可留言交流。
java 画曲线+图形的保存于打开 O(∩_∩)O哈哈~
主要实现以下几个功能: ...2.接收输入的数据并实时的绘制出曲线,最后将接收到的数据保存为EXCEL文件。具体效果和代码片段可以看我的文章 https://blog.csdn.net/qq_42011369/article/details/108947573
BMP图的绘制和保存,EXCEL报表的导出,保存界面显示曲线图和保存功能,并有打开EXE文件的功能!
C++ 曲线图 双缓冲绘图 区域图 柱形图 内存图片的保存 共同学习,资源共享
python实现可暂停的动态曲线绘制,横纵坐标从上一个点到当前点,同时保存数据到文件中
VC 如何实现类似心电图的曲线绘制图,使用了ZgChart类库,也就是绘制出一些变化明显的连续曲线图,源码所演示的正是这种类似心电图风格的电流曲线图,实现思路上,先使用随机数,先建立种子,然后设置曲线纵轴的范围...
python实现可暂停的动态曲线绘制,横纵坐标固定,同时保存数据到文件中
python实现同时绘制两条曲线,可暂停可放大,同时保存数据到文件可
python实现可暂停的动态曲线绘制,纵坐标固定,横坐标从上一个点到当前点,同时保存数据到文件中
python实现可暂停的动态曲线绘制,纵坐标固定,横坐标从上一个点到当前点,同时保存数据到文件中