vb.net 画线再画保留以前画得

VB.netpicturebox上用鼠标画线,但是我画完以后再画就去掉了以前画得。我怎么保留以前画得也下次画得。我用的代码:PublicClassForm1DimqqAs... VB.net picturebox 上用鼠标画线, 但是我画完以后 再画就去掉了以前画得。 我怎么保留以前画得也下次画得。 我用的代码:

Public Class Form1
Dim qq As Boolean
Dim x1, x2, y1, y2 As Single
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
qq = True
x1 = e.X
y1 = e.Y
End Sub

Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
x2 = e.X
y2 = e.Y
If qq = True Then
PictureBox1.Refresh()
PictureBox1.CreateGraphics.DrawRectangle(Pens.Red, x1, y1, x2, y2)
End If
End Sub

Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
PictureBox1.CreateGraphics.DrawRectangle(Pens.Red, x1, y1, x2, y2)
qq = False
End Sub
End Class
展开
 我来答
Silin_Silin
2013-01-30 · TA获得超过470个赞
知道小有建树答主
回答量:303
采纳率:50%
帮助的人:384万
展开全部

可以把所有画的线都保存在一个列表中,画的时候全部画出即可。如下:


Public Class Form1


    Class Line      '直线类


        Public Point1, Point2 As Point     '成员,直线的两个端点


        Sub New(p1 As Point, p2 As Point)   '构造方法

            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 '左键未按下


        '鼠标拖动时改变列表最后一条直线(也即当前直线的第二个端点)

        Lines(Lines.Count - 1).Point2 = e.Location

        Refresh()       '刷新窗体

    End Sub


    '在Form的Paint事件中绘制所有直线,每次Form1重绘时都会触发Paint事件

    'PS: 也可以通过重写OnPaint方法来达到类似的效果

    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)  '调用绘制方法,传入的参数可以理解为画布

        Next

    End Sub


End Class


运行效果:

tbq03060
2013-01-31 · TA获得超过1341个赞
知道大有可为答主
回答量:1.4万
采纳率:0%
帮助的人:2174万
展开全部
首先,你必须建立一个位图
图像控制图像性能,然后以图片相关联的图像
上画线
图像保存到一个文件中
< / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
暗淡MYBITMAP作为图象
MYBITMAP =新的Bitmap(300,150)
PictureBox0.Image:= MYBITMAP
点心作为图形的
走势图= Graphics.FromImage(PictureBox0.image)的
走势图走势图。 drawLine的(Pens.Blue,0,0,111,111)

picturebox0.image.save(“C:\ aaa.jpg”)

/ / / / / / / / / / / / / / / / / /我一直在使用这个方法/ / / / / / / / / / / / / / / / / / /
保存为文件,绝对是你画的线......
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7e963b1fd
2013-01-29 · TA获得超过951个赞
知道小有建树答主
回答量:816
采纳率:50%
帮助的人:632万
展开全部
先要建立bitmap,使它与PictureBox1关联

Dim mybitmap As Bitmap
Dim Graph As Graphics

下面的可以放在new里面
mybitmap = New Bitmap(300, 150)
PictureBox1.Image = mybitmap
Graph = Graphics.FromImage(PictureBox1.Image)

PictureBox1_MouseUp里面改成下面的
Graph.DrawRectangle(Pens.Red, x1, y1, x2, y2)
PictureBox1.Image.Save("D:/1.jpg")
qq = False
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zdm1306230
2013-01-26
知道答主
回答量:29
采纳率:0%
帮助的人:19.9万
展开全部
PictureBox1.Refresh()
刷新了,去掉这一句看看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
azhu19915911
2013-01-26 · TA获得超过5816个赞
知道大有可为答主
回答量:2621
采纳率:33%
帮助的人:839万
展开全部
不说假话,这个代码我真的不懂。
追问
我输得不是假的, 这是VB.net的源代码。 你不知道VB.net吗?
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式