Vb.net 在列表中保存位图总是返回相同的图像
我正在为图像编辑器创建一个Vb.net 在列表中保存位图总是返回相同的图像,vb.net,visual-studio-2010,visual-studio-2012,Vb.net,Visual Studio 2010,Visual Studio 2012,我正在为图像编辑器创建一个CTRL+Z undo功能,每次单击屏幕都会用以下代码保存图像: Private Sub SaveMap(ByVal sender As Object, ByVal e As EventArgs) Handles PictureBox1.Click Dim asd As New Bitmap(Form6.PictureBox1.Image) GlobalVariables.BackUp.Add(Form6.PictureBox1.Image) a
CTRL+Z undo
功能,每次单击屏幕都会用以下代码保存图像:
Private Sub SaveMap(ByVal sender As Object, ByVal e As EventArgs) Handles PictureBox1.Click
Dim asd As New Bitmap(Form6.PictureBox1.Image)
GlobalVariables.BackUp.Add(Form6.PictureBox1.Image)
asd.Dispose()
End Sub
每次用户按下CTRL+Z
时,都会执行此代码
Private Sub Picturebox1_KeyPress(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Z And e.Control Then
GlobalVariables.BackUp.RemoveAt(GlobalVariables.BackUp.Count - 1)
Form6.PictureBox1.Image = New Bitmap(GlobalVariables.BackUp.Last)
Form6.PictureBox1.Refresh()
End If
End Sub
但是看到我保存在公共共享备份中的所有位图作为新列表(位图)
都是相同的
因为无论我使用GlobalVariables.BackUp.Item()
返回哪个索引,它们都返回完全相同的映像
为什么列表上的位图会被替换,而不是一个接一个地添加?您保存的不是新位图,而是对picturebox.image的引用。作为参考,它将在
PictureBox.Image
更改时更改。这将通过克隆当前显示的内容将新图像保存到列表中:
Private Sub SaveMap(ByVal sender ...
Dim bmp As Bitmap
bmp = Form6.PictureBox1.Image.Clone ' clone the image
GlobalVariables.BackUp.Add(bmp) ' save the copy
' dispose of it later when you remove it from the list
End Sub
您不是在列表中保存位图,而是对picturebox图像的引用。当该图像更改时,您保存的内容也会更改,因为它只是一个参考。尝试了3种不同的方法:
Dim asd As New Bitmap(Form6.PictureBox1.image.Clone)
给出错误“如果不进行缩小转换,则无法调用New”,Dim asd As Bitmap asd=Form6.PictureBox1.Image.Clone
在我尝试从列表中获取时,给我一个空对象错误,您给我的代码说“没有可访问的新对象接受此数量的参数”,怎么了?抱歉,复制错误;您不需要在bmp声明中使用New
-Clone
将创建一个新的。您需要检查PicBox中是否有图像,以避免出现NullReferenceException我将代码放在try/catch中,它会给我以下错误:发生了什么?不确定,我不会说那种语言来知道哪一行,但这与您原来的问题不同。我不知道图像存储的内容/方式-看起来不仅仅是一个列表(位图)
,它没有Last
道具;哦,我明白了,谢谢你的信息,你把我放在了正确的位置,现在我会发现还有什么不对:)谢谢