首页 > 解决方案 > PictureBox2.Image = PictureBox1.Image 似乎是链接框而不是复制图像?

问题描述

问题

我有一个带有 2 个图片框的简单表格

我允许用户在PictureBox1上绘图 当我单击表单上的按钮n 时,我想在 PictureBox1 中捕获图像并将其存储在PictureBox2中

问题是,如果我添加以下行: PictureBox2.Image = PictureBox1.Image对PictureBox1的 任何更新都会立即反映在PictureBox2中?!?

我只想在那一刻及时捕捉PictureBox1中的图像,以便我可以用它来“撤消”

科技

它是使用 Visual Studio 2019 Preview 的 Visual Basic、.Net 4.7.2 中的 Windows 窗体应用程序

代码

Public Class Form1

    Dim drawMouseDown = False ' Set initial mouse state to not clicked
    Dim drawMyBrush As New Pen(Brushes.White, 20) 'Set up the Brush
    Public drawCanvas As New Bitmap(245, 352) 'Set up Bitmap Canvas

    Private Sub btn_Color_Yellow_Click(sender As Object, e As EventArgs) Handles btn_Color_Yellow.Click
        drawMyBrush.Brush = Brushes.Yellow
        drawMyBrush.Width = 20
    End Sub

    Private Sub PictureBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown
        drawMouseDown = True
    End Sub

    Private Sub PictureBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseUp
        drawMouseDown = False
    End Sub

    Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove
        Dim g As Graphics = Graphics.FromImage(drawCanvas)
        Static coord As New Point
        If drawMouseDown Then
            g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
            drawMyBrush.StartCap = Drawing2D.LineCap.Round
            drawMyBrush.EndCap = Drawing2D.LineCap.Round
            g.DrawLine(drawMyBrush, coord.X, coord.Y, e.X, e.Y)
            g.Dispose()
            PictureBox1.Image = drawCanvas
            Me.Refresh()
        End If
        coord = e.Location
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        PictureBox2.Image = PictureBox1.Image 'Why does this not just update the PicBox2 image once?!? (or only when the Button is clicked)
    End Sub

End Class

期待

单击Button1时,我希望PictureBox2包含PictureBox1图像,当我继续在PictureBox1上绘图时,我希望它在用户在另一个上绘图时继续更新PictureBox2

标签: vb.net

解决方案


正如您所怀疑的,PictureBox2.Image = PictureBox1.Image将前者作为对后者的引用。

你可以做的是克隆图像:

PictureBox2.Image = DirectCast(PictureBox1.Image.Clone(), Image)

推荐阅读