Толчок кистью через стек? - PullRequest
0 голосов
/ 04 июня 2010

Я пытаюсь создать функцию отмены для редактора изображений, но у меня возникли проблемы. Что я пытаюсь сделать, это протолкнуть каждый мазок кисти через стек, а затем использовать 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 голосов
/ 04 июня 2010

Вам нужно сохранить текущее состояние изображения, а не кисть, чтобы изменить его, так как вы не можете отменить его напрямую. Конечно, вы можете изменить изменение состояния для каждого измененного пикселя (сравнивая до и после применения кисти), сэкономив память и время обработки. Будьте внимательны, чтобы сохранить копию изображения, а не только ссылку.

0 голосов
/ 04 июня 2010

Разве вы не должны нажимать текущее состояние pictureBox1 перед выполнением мазка?

...