您好,您是想問vb.net連續(xù)繪制曲線圖不消失怎么辦?b.net連續(xù)繪制曲線圖不消失的解決辦法如下:
創(chuàng)新互聯(lián)成立于2013年,先為阿城等服務建站,阿城等地企業(yè),進行企業(yè)商務咨詢服務。為阿城企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
1、首先必須創(chuàng)建bitmap,關聯(lián)到picturebox1.image上。
2、再在picturebox1.image上創(chuàng)建Graphics,再進行作圖。即可顯示線圖。
Private Sub PictureBox2_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox2.Paint
Dim points As New List(Of Point)
points.Add(New Point(0, 0))
points.Add(New Point(1, 10))
points.Add(New Point(3, 15))
points.Add(New Point(14, 0))
points.Add(New Point(20, 60))
points.Add(New Point(40, 20))
points.Add(New Point(70, 50))
e.Graphics.DrawCurve(Pens.Red, points.ToArray)
End Sub
供參考,points可設為全局變量,那樣add隨便在哪增加,想要看見看上去動態(tài)的圖,那就在新增完n個后,繼續(xù)增加n+1個之時,放棄points中的第一個。
這個要用GDI+畫。要看你.net版本。
以下是VS2005中的一段代碼。
Me.PictureBox1.Height = 450
Me.PictureBox1.Width = 880
Dim gr As Graphics '定義畫布
Dim bp As New Bitmap(880, 450) '定義位圖,并進行賦值
Dim p As New Pen(Color.Black) '定義畫筆
p.Width = 2 '寬度2
p.DashStyle = Drawing2D.DashStyle.Solid '樣式直線
PictureBox1.Image = bp
gr = Graphics.FromImage(PictureBox1.Image)
gr.FillRectangle(Brushes.White, New Rectangle(0, 0, PictureBox1.Width, PictureBox1.Height))
gr.DrawLine(p, a, b, a, .Height - b) '繪制縱坐標
gr.DrawLine(p, a, .Height - b, .Width - a, .Height - b) '繪制橫坐標
我先給你寫一段如果不明白加我QQ:905906
在工控制軟件中,實時曲線的繪制用途非常的廣泛,它可以很直觀的顯示出監(jiān)控數(shù)據(jù)的變化值和變化趨勢。在VB中實現(xiàn)曲線的繪制有很多種方法,本文介紹一種非常簡單的方法來實現(xiàn)實時曲線的繪制。
在VB中實現(xiàn)實時曲線的繪制,要利用VB的PictureBox(圖像)控件,和畫線函數(shù)line(x1,y1)-(x2,y2)。PictureBox控件,可以作為一個“容器”,在它的里面可以包含很多的對象。也可以執(zhí)行很多VB的內部函數(shù)。
要實現(xiàn)實時曲線的繪制,肯定要有外部實時數(shù)據(jù)的輸入,這里假設是有一個數(shù)據(jù)從計算機的串口輸入 定義該數(shù)據(jù)變量為DataFromCom。實時曲線反映的就是該數(shù)據(jù)。
打開VB6.0中文版,新建一個項目和窗體,修改窗體的屬性,將“Heigh”修改為:8000,“Width”修改為在窗體中放如一個PictureBox控件。然后重新定義PictureBox控件的一些基本屬性,在VB中選中PictureBox控件,直接在它的屬性框中,修改一些屬性參數(shù)?!懊Q”改為Pic。 “AutoRedraw”改為:True?!癇ackColor”改為:H00004000(墨綠色背景顏色)?!盚eigh”改為:5000?!癢idth”改為:8000。如圖1所示:
然后要重新定義PictureBox控件的坐標系。圖像框的默認坐標系,是從左上角開始的,不符合我們的畫線要求。修改坐標系的目的是讓曲線從圖像框的左邊正中間,開始畫線。修改圖像框的坐標系,這里定義一個過程PicScale(),代碼如下:
Private Sub PicScale(picX As PictureBox)
picX.Scale (0, PicX.ScaleHeight)-(picX.ScaleWidth, -PicX.ScaleHeight)
End Sub
一般的實時曲線顯示的時候在屏幕的正中間有一條基準線,這里也要畫出這條基準線,用一個過程PicMidleLine()來實現(xiàn),代碼如下:
Private Sub PicMidleLine( picX As PictureBox)
picX.Line (0, 0)-(picX.ScaleWidth, 0), vbGreen '畫出中線
End Sub
要畫一條實時曲線,坐標軸的設定很重要,在這里把X軸設定為時間軸,Y軸設定為數(shù)據(jù)軸。對應X軸我們定義一個時間變量TimeCount,TimeCount會隨著時間逐漸遞增,每次遞增,對應著一個從串口讀過來的數(shù)據(jù)DataFromCom,這樣圖像框中的(x,y)坐標點實際上就對應著(TimeCount,DataFromCom)如果只是當TimeCount發(fā)生變化時就在圖像框上畫一個點,就只需調用VB中的畫像素的函數(shù)point(x,y),這里x,y為所畫的點的坐標。單這樣畫出來的是一個個不連續(xù)的點。我們想要的是實時的連續(xù)的曲線,所以要調用VB中的畫線的函數(shù)line(x1,y1)-(x2,y2),這里(x1,y1)(x2,y2)為所要畫的線的起點和終點的坐標。只要把上次串口讀過來的數(shù)據(jù)(這里把它定義為變量DataFromComLast)和現(xiàn)在串口讀過來的數(shù)據(jù)(DataFromCom)和TimeCount相對應,調用line(x1,y1)-(x2,y2)函數(shù)就可以在圖像框中畫出實時的曲線了。把它寫成一個過程如下面的代碼:
Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)
If TimeCountX - 1 0 Then
picX.Line (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite
End If
End Sub
有了三個過程就可以在圖像框中畫出一條實時的曲線了。
DrawRealLine()過程中的picX.Line (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite所畫線的起始點和結束點都是以像素為單位的,這樣以來如果不改變的話,畫出來的線將是一個屏幕上像素相連的很密的曲線,通過調整line(x1,y1)-(x2,y2)
中的x的值,就可以畫出分布密度不一樣的曲線,這里為了在屏幕上能夠看到不是很密的曲線我們把x乘以一個系數(shù)10,修改為:
picX.Line ((TimeCountX - 1) * 10, DataFromComLastX)-(TimeCountX * 10, DataFromComX), vbWhite
這比較容易在屏幕上看到稀疏的曲線。
由于是僅僅講解如何畫出實時的曲線,讀者的計算機上未必有和串口相連的設備,這里用一個定時器控件來模擬從串口讀過來的數(shù)據(jù)。在窗體上放入一個Timer控件,修改Timer控件的屬性為:“Enable”該為True,“Interval”改為300。雙擊Timer控件在它的過程中,添加代碼后如下:
Private Sub Timer1_Timer()
DataFromComLast = DataFromCom
Randomize
DataFromCom = 3000 * Rnd
TimeCount = TimeCount + 1
DrawRealLine Pic, TimeCount, DataFromCom, DataFromComLast
End Sub
這樣在運行后就可以看到我們想要的實時曲線了,如下圖:
圖 2
下面是完整的代碼:
Option Explicit
Dim DataFromCom As Integer '從串口讀過來的實時值
Dim DataFromComLast As Integer '上次的串口值
Dim TimeCount As Integer
Private Sub Form_Load()
PicScale Pic '調整圖像框的坐標系
PicMidleLine Pic '在圖像框中畫一條中線
End Sub
Private Sub PicScale(picX As PictureBox) '調整圖像框的坐標系
picX.Scale (0, picX.ScaleHeight)-(picX.ScaleWidth, -picX.ScaleHeight)
End Sub
Private Sub PicMidleLine(picX As PictureBox) '在圖像框中畫一條中線
picX.Line (0, 0)-(picX.ScaleWidth, 0), vbGreen '畫出中線
End Sub
Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)
If TimeCountX - 1 0 Then
picX.Line ((TimeCountX - 1) * 10, DataFromComLastX)-(TimeCountX * 10, DataFromComX), vbWhite
End If
End Sub
Private Sub Timer1_Timer()
DataFromComLast = DataFromCom
Randomize
DataFromCom = 3000 * Rnd
TimeCount = TimeCount + 1
DrawRealLine Pic, TimeCount, DataFromCom, DataFromComLast '畫出實時的曲線
End Sub
。net ?其實還是很好繪制圖形的
你可以看下?Graphics ?類
Dim d As New Bitmap(Me.Width, Me.Height) ?‘一個圖片吧
? Dim g As Graphics = Graphics.FromImage(d)’繪制 ?準備在這個圖片是進行
然后 ?就是你繪制的東西了
線 就是 ??g.DrawLine()
圓 弧度 ?就用 ?g.DrawArc(Pens.Black, New Rectangle(0, 0, 400, 200), 0, 360)
復雜的就是 ? ? ?g.DrawBezier()
等 ?如果你用的是 VS的 ?編譯 ?上面都有詳細的參數(shù)說明
Dim?d?As?New?Bitmap(Me.Width,?Me.Height)
Dim?g?As?Graphics?=?Graphics.FromImage(d)
g.DrawArc(Pens.Black,?New?Rectangle(0,?0,?200,?200),?0,?360)
g.DrawLine(Pens.Red,?New?Point(0,?0),?New?Point(200,?200))
g.DrawLines(Pens.Green,?New?Point()?{New?Point(0,?0),?New?Point(50,?40),?New?Point(50,?80),?New?Point(90,?70),?New?Point(100,?400)})
g.DrawBezier(Pens.Yellow,?New?Point(0,?100),?New?Point(0,?0),?New?Point(200,?0),?New?Point(200,?200))
g.Dispose()
Me.BackgroundImage?=?d
本文名稱:vb.net中畫曲線 vb實時曲線繪制
文章出自:http://m.rwnh.cn/article24/hhgpce.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、企業(yè)網(wǎng)站制作、品牌網(wǎng)站建設、Google、網(wǎng)站維護、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)