Попытка реализовать опцию ctrl z в Windows form

#c# #image #winforms

#c# #изображение #winforms

Вопрос:

Я пытался реализовать функцию ctrl z в своем приложении mini paint. Проблема в том, что со стороны графического окна это не работает. В начале события наведения курсора мыши перед новым рисунком я сохраняю текущее изображение графического блока в стеке, и когда я нажимаю ctrl z, я извлекаю это изображение и сохраняю его в изображении графического блока. Проблема в том, что он всегда сохраняет новое измененное изображение в стеке, а не предыдущее, даже если я сохранил его технически до новых обновлений (в начале события наведения курсора мыши).

Фрагмент кода

 void key(object sender, KeyEventArgs e){

...
else if (  e.Control amp;amp; e.KeyCode == Keys.Z) {
    
   if (save.Count > 0) {  
                    //trying to save the previous image                                       
                    pictureBox9.Image = save.Peek() as Image;   
                    drawArea = save.Pop() as Bitmap;
                    pictureBox9.Image = drawArea;
                    g1 = Graphics.FromImage(drawArea);
                   // pictureBox9.Refresh();
                }
    }
}

 private void pictureBox9_MouseUp(object sender, MouseEventArgs e){
     save.push(pictureBox9.Image);   

     //save is the stack and that should be the current image      
     ....
}
  

Комментарии:

1. Кажется, что вы нажимаете на stack и извлекаете из него всегда один и тот же экземпляр image. При нажатии вам нужно сделать копию изображения.

2. Кстати, это обычная ловушка для создания пользовательских чертежей непосредственно в a PictureBox . «Обычно PictureBox используется для отображения графики из растрового изображения, метафайла, значка, файла JPEG, GIF или PNG». Вместо этого вы можете рассмотреть возможность создания собственного типа, производного от Control . Это дает полный контроль над рендерингом и знание того, как он управляется

3. Идея копирования, которую я пробовал раньше, и она не сработала. Я скопировал растровое изображение, поместил его в стек, а затем выскочил, но ничего

4. Редактировать, моя проблема была решена путем действительно сохранения клона