vb.net - 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!
解决方案
正如您所怀疑的,PictureBox2.Image = PictureBox1.Image
将前者作为对后者的引用。
你可以做的是克隆图像:
PictureBox2.Image = DirectCast(PictureBox1.Image.Clone(), Image)
推荐阅读
- kubernetes - kubectl create configmap - 使用 --file-name 选项生成时从输出配置映射中删除文件名的选项
- atmelstudio - 使用 Atmel Studio 时进入编程模式时出现问题
- r - 如何在 Forest_model 中合并多个 cox 回归模型?
- php - 如何防止 Netsuite SOAP Api 超时?
- apache-kafka - Confluent Schema 注册表失败 POST 请求失败
- node.js - 在部署在 heroku 上的节点应用程序上收到此错误消息
- delphi - DBGrid 中的 CheckBox 锁定文本条目
- apache-kafka - 无法建立到节点 -1 (localhost/127.0.0.1:9092) 的连接。经纪人可能不可用。VPS 连接
- php - 购物车和用户身份验证级别无法正常工作,未定义索引 carID,但它通过 POST 请求传递
- visual-studio - 没有为项目设置OutputPath属性... / VS任意更改解决方案中的项目配置从Debug到Release