2010-06-04 13 views
0

Im essayant de créer une fonction d'annulation pour un éditeur d'image mais j'ai des ennuis. Ce que j'essaie de faire, c'est de pousser chaque coup de pinceau dans une pile, puis d'utiliser stackName.Pop() pour annuler, mais je n'arrive pas à ajouter le coup de pinceau à la pile. Voici mon code:Pousser la course de la brosse dans la pile?

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? 
     } 
    } 

Mais je ne sais pas quoi enfoncer dans la pile. S'il vous plaît, merci!

Répondre

0

Ne devriez-vous pas pousser l'état actuel de pictureBox1 avant d'exécuter le coup de pinceau?

+0

Je ne sais pas, comment ferais-je cela? undoStack.Push (pictureBox1); ? – Tanner

0

Vous devez enregistrer l'état actuel de l'image, et non le pinceau, car vous ne pouvez pas le défaire directement. Vous pouvez bien sûr changer le changement d'état pour chaque pixel changé (en comparant avant et après avoir appliqué le pinceau), en économisant de la mémoire et du temps de traitement. Soyez conscient de réellement enregistrer une copie de l'image, pas seulement la référence.

+0

OK, puis-je utiliser undoStack.Push (pictureBox1.Image); & undoStack.Pop(); ou comment pourrais-je faire cela? – Tanner

+0

Je l'enregistrerais comme octet [], car il ne s'agit pas d'une référence à l'image elle-même. – Femaref

+0

OK, merci pour votre aide. :) – Tanner