我试图为图像编辑器创建撤消功能,但我遇到了麻烦。我试图做的是将每个画笔笔划推入堆栈,然后使用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 :(得分:0)
在执行画笔描边之前,你不应该推动pictureBox1的当前状态吗?
答案 1 :(得分:0)
您需要保存图像的当前状态,而不是更改它的画笔,因为您无法直接撤消它。您当然可以更改每个像素更改的状态更改(通过比较应用画笔之前和之后),节省内存和处理时间。请注意实际保存图像的副本,而不仅仅是参考。