Организация мероприятий по рисованию / Вопросы дизайна - PullRequest
0 голосов
/ 26 января 2012

У меня есть программа, которая редактирует изображения различными способами ... У меня есть событие Paint, которое вызывается каждый раз, когда я делаю это. Invalidate () ...

Мой метод рисования выглядит так:

 private void EditImage_Paint(object sender, PaintEventArgs e)
    {
        if (isLOaded == true)
        {

                Graphics graphicsWindow;   // reference to the graphic surface of this window
                Graphics graphicsImage;     // reference to in-memory surface

                theImage = new Bitmap(Width, Height);     // bitmap for window surface copy

                graphicsWindow = e.Graphics;   // get our current window's surface
                graphicsImage = Graphics.FromImage(theImage);     // create surfaces from the bitmaps

                graphicsImage.DrawImage(firstLoaded, 0, 0, Width, Height);



                if (isInvert == true)
                {
                    theImage = InvertBitmap(theImage);
                }
                else if (isGrayscale == true)
                {
                    theImage = GrayscaleBitmap(theImage);
                }
                else if (isThreshold == true)
                {
                    theImage = ThresholdBitmap(theImage);
                }
                else if (isResize == true)
                {
                    theImage = resizeImage(theImage, 10, 100);
                }
                else if (isFilterRed == true)
                {
                    theImage = FilterRedBitmap(theImage); 
                }
                else if (isFilterGreen == true)
                {
                    theImage = FilterGreenBitmap(theImage);
                }
                else if (isFilterBlue == true)
                {
                    theImage = FilterBlueBitmap(theImage);
                }

                graphicsWindow.DrawImage(theImage, 0, 0);

        }
    }

У меня есть другая область в моем коде, которая устанавливает некоторые логические значения в true или false в событиях Click .... (так как моя программа использует winforms), и, следовательно, моя программа знает, какой метод вызывать. Однако я считаю, что помещать все эти вещи в краску - это просто плохой дизайн. Моя проблема в том, что я не знаю, как передать растровое изображение в событие Click? Это возможно? Я бы предпочел иметь дело с тем, что происходит в событиях Click, а не с методами рисования. Любая идея о том, как я мог бы разработать это лучше?

1 Ответ

2 голосов
/ 26 января 2012

Вы должны держать свои события рисования как можно быстрее.

Вы должны сохранить окончательное изображение в поле класса и восстановить его при изменении параметров.
Затем вы можете заменить все событие Paint простым PictureBox.

В примечании вы должны либо изменить различные функции фильтра, чтобы изменить изображение на месте (предпочтительно), либо утилизировать старое изображение каждый раз, когда вы создаете новое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...