2014-05-17 5 views
0

임은 이미지 편집기에 대한 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 

을 실행하지만, 모든 비트 맵은 Public Shared BackUp As New List(Of Bitmap)가 동일한에 저장 메신저 것을 seens됩니다.

GlobalVariables.BackUp.Item()으로 어떤 색인을 반환하든 관계없이 모두 동일한 이미지를 반환합니다.

왜 목록의 비트 맵이 바뀌면서 차례로 추가되지 않습니까?

+0

목록에는 비트 맵을 저장하지 않고 그림 상자 이미지는 참조로 저장합니다. 그 이미지가 바뀌면 단순한 참조이므로 저장 한 내용도 마찬가지입니다. – Plutonix

답변

0

새로운 비트 맵을 저장하는 것이 아니라 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 
+0

은 3 가지 방법으로 시도했습니다 :'새 비트 맵 (Form6.PictureBox1.Image.Clone)으로 희미 해짐'좁게 변환하지 않으면 새로운 것을 호출 할 수 없습니다. ','비트 맵 asd = Form6.PictureBox1.Image. Clone'은 일단 목록에서 그것을 얻으려고하면 null 객체 오류를줍니다. 그리고 여러분이 나에게 준 코드는 "접근 할 수없는 New는이 수의 인수를 받아들입니다"라고 말합니다. 무엇이 잘못 되었습니까? –

+0

죄송합니다, 복사 오류가 발생했습니다. 당신은 bmp 선언에'New'가 필요 없습니다 -'Clone'은 새로운 것을 만듭니다. 당신은 NullReferenceException을 피하기 위해 PicBox에 이미지가 있는지 확인하고 싶을 것입니다. – Plutonix

+0

try/catch 안에 코드를 넣으면 오류가납니다 : http://pokit.org/get/img/ec2169b21247497f4347ca4c0d788953.jpg 무엇을 이 일어나고있다? –

관련 문제