2010-06-04 4 views
0

이미지 편집기에서 실행 취소 기능을 만들려고하는데 문제가 생겼습니다. 임 무슨 짓을하려고하면 스택을 통해 각 브러시 스트로크를 누른 다음 stackName.Pop()을 사용하여 취소 할 수 있지만 스택에 브러시 스트로크를 추가 할 수 없습니다. 여기 내 코드는 다음과 같습니다.스택을 통해 브러시 스트로크 밀기?

Stack undoStack = new Stack(); 
    bool mouseDown = false; 
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     mouseDown = true; 
    } 

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (mouseDown == true) 
     { 
      int width = 50; 
      int height = 50 + 1; 
      int top = e.Location.X - width/2; 
      int left = e.Location.Y - height/2; 

      Color theColor = Color.Navy; 
      SolidBrush brush = new SolidBrush(theColor); 

      System.Drawing.Graphics graphObj = Graphics.FromHwnd(pictureBox1.Handle); 
      graphObj.FillEllipse(brush, new Rectangle(top, left, width, height)); 

      undoStack.Push(graphObj);//What Do I push here? 
     } 
    } 

그러나 스택에 무엇을 넣어야할지 모르겠습니다. 감사합니다 도와주세요!

답변

0

브러시 획을 수행하기 전에 pictureBox1의 현재 상태를 푸시해야하지 않습니까?

+0

잘 모르겠습니다. 어떻게해야합니까? undoStack.Push (pictureBox1); ? – Tanner

0

브러시를 변경하지 않고 이미지의 현재 상태를 저장해야합니다. 직접 실행 취소 할 수는 없으므로 저장해야합니다. 물론 변경된 각 픽셀의 상태 변경 (브러시 적용 전후에 비교)을 통해 메모리 및 처리 시간을 절약 할 수 있습니다. 참조뿐만 아니라 실제로 이미지 사본을 저장해야합니다.

+0

OK 그래서 undoStack.Push (pictureBox1.Image)를 사용할 수 있습니까; & undoStack.Pop(); 또는 어떻게 이것을 할 수 있습니까? – Tanner

+0

이것은 이미지 자체에 대한 참조가 아니므로 바이트 []로 저장합니다. – Femaref

+0

네, 도와 줘서 고마워. :) – Tanner