推刷笔画通过堆栈?

时间:2010-06-04 18:59:44

标签: c# .net stack push

我试图为图像编辑器创建撤消功能,但我遇到了麻烦。我试图做的是将每个画笔笔划推入堆栈,然后使用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?
        }
    }

但我不知道该怎么推进堆栈。请帮忙谢谢!

2 个答案:

答案 0 :(得分:0)

在执行画笔描边之前,你不应该推动pictureBox1的当前状态吗?

答案 1 :(得分:0)

您需要保存图像的当前状态,而不是更改它的画笔,因为您无法直接撤消它。您当然可以更改每个像素更改的状态更改(通过比较应用画笔之前和之后),节省内存和处理时间。请注意实际保存图像的副本,而不仅仅是参考。