'把“Dim graph As Graphics = Me.CreateGraphics”挪到“Button1_Click”事件內(nèi),調(diào)試過成功!
10年積累的做網(wǎng)站、網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有歷城免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim graph As Graphics = Me.CreateGraphics
Dim pen2 As Pen = New Pen(Color.Green, 3)
graph.DrawLine(pen2, 400, 400, 500, 200)
End Sub
End Class
1.用picturebox 控件可以實現(xiàn)
2.可以使用Scale方法移動坐標(biāo)原始位置和改變坐標(biāo)軸方向,以下該方法:
Scale(x1,y1)-(x2,y2)
X1和y1為對象左上角的新坐標(biāo)位置;
X2和y2為對象右下角的新坐標(biāo)位置;
現(xiàn)在讓我們看看一些范例。這一方法將使原點處于左上角,但將坐標(biāo)系統(tǒng)單位改變?yōu)榇绑w大小的1/100:
Picture1.Scale(0,0)-(100,100)
以下調(diào)用將移動原點到窗體的左下角,并旋轉(zhuǎn)Y軸:
Picture1.Scale(0,100)-(100, 0)
以下調(diào)用將移動原點到窗體的正中心,并旋轉(zhuǎn)Y軸,然后將坐標(biāo)單位轉(zhuǎn)換為窗體大小的1/5000:
Picture1.Scale(-2500,2500)-(2500,2500)
用Picture1.Line (x1,y1)-(x2,y2)
如果不指定(x1,y1)則line方法默認(rèn)為上次line方法的(x2,y2)為當(dāng)前l(fā)ine方法(x1,y1)
For i = 1 To 100
j = i + 10
Me.Picture1.Line -(i, j), vbRed '可以指定畫線的顏色
Next
3.如果畫到最右邊的時候,可以清掉picturebox 的內(nèi)容,從頭再畫。
給段代碼,供參考:
Private Sub Form_Load()
Dim i, j As Integer
Me.Picture1.Scale (0, Me.Picture1.Height)-(Me.Picture1.Width, 0)
Me.Picture1.AutoRedraw = True
Me.Picture1.Line (0, 0)-(0, 0), vbRed
For i = 1 To 1000
j = i + 10
Me.Picture1.Line -(i, j), vbRed
Next
End Sub
我這樣畫過曲線,大概思路就是這樣吧,希望能幫到你
可以把所有畫的線都保存在一個列表中,畫的時候全部畫出即可。如下:
Public?Class?Form1
Class?Line? ? ? '直線類
? Public?Point1,?Point2?As?Point? ? ?'成員,直線的兩個端點
? Sub?New(p1?As?Point,?p2?As?Point)? ?'構(gòu)造方法
? ? ? Point1?=?p1
? ? ? Point2?=?p2
? End?Sub
? Public?Sub?Draw(g?As?Graphics)? ? ? '繪制方法
? ? ? g.DrawLine(Pens.Black,?Point1,?Point2)
? End?Sub
End?Class
Private?Lines?As?New?List(Of?Line)? ? ? '列表用于保存所有畫下的直線
Private?Sub?Form1_Load(sender?As?Object,?e?As?EventArgs)?Handles?MyBase.Load
? BackColor?=?Color.White
? DoubleBuffered?=?True? ? ? ?'開啟雙緩沖可有效避免閃爍
End?Sub
Private?Sub?Form1_MouseDown(sender?As?Object,?e?As?MouseEventArgs)?Handles?Me.MouseDown
? Lines.Add(New?Line(e.Location,?e.Location))? ? ?'在直線列表中添加直線
End?Sub
Private?Sub?Form1_MouseMove(sender?As?Object,?e?As?MouseEventArgs)?Handles?Me.MouseMove
? If?e.Button??Windows.Forms.MouseButtons.Left?Then?Return?'左鍵未按下
? '鼠標(biāo)拖動時改變列表最后一條直線(也即當(dāng)前直線的第二個端點)
? Lines(Lines.Count?-?1).Point2?=?e.Location
? Refresh()? ? ? ?'刷新窗體
End?Sub
'在Form的Paint事件中繪制所有直線,每次Form1重繪時都會觸發(fā)Paint事件
'PS:?也可以通過重寫OnPaint方法來達(dá)到類似的效果
Private?Sub?Form1_Paint(sender?As?Object,?e?As?PaintEventArgs)?Handles?Me.Paint
? e.Graphics.SmoothingMode?=?Drawing2D.SmoothingMode.AntiAlias? ? '開啟抗鋸齒
? For?Each?l?In?Lines? ? ?'遍歷所有直線
? ? ? l.Draw(e.Graphics)? '調(diào)用繪制方法,傳入的參數(shù)可以理解為畫布
? Next
End?Sub
End?Class
運行效果:
首先你要建一個 Bitmap
再將picture控件的image屬性與之相關(guān)聯(lián)
再到 picture的image上畫線
保存image到文件
/////////////////////////////////
Dim mybitmap As Bitmap
mybitmap = New Bitmap(300, 150)
PictureBox0.Image = mybitmap
Dim Graph As Graphics
Graph =Graphics.FromImage(PictureBox0.image)
Graph .drawline(Pens.Blue,0,0,111,111)
picturebox0.image.save("c:\aaa.jpg")
/////////////////////////////////////
存成的文件絕對有你畫的線..我一直在用這種方法