油漆事件组织/设计问题

时间:2012-01-26 02:29:47

标签: c# .net winforms oop

我有一个以不同方式编辑图像的程序...每次执行此操作时都会调用一个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);

        }
    }

我的代码中有另一个区域,它在Click事件中将一些布尔值设置为true或false ....(因为我的程序使用winforms),因此我的程序知道要调用哪个方法。但是,我认为将所有这些东西都放在油漆中只是糟糕的设计。我的问题是我不知道如何将位图图像传递给Click事件?那可能吗?我更愿意处理在Click事件中发生的事情,而不是在paint方法中。关于如何更好地设计这个的任何想法?

1 个答案:

答案 0 :(得分:2)

你应该尽快保持你的油漆事件。

您应该将最终图像存储在类中的字段中,并在选项更改时重新生成它 然后,您可以使用简单的PictureBox替换整个Paint事件。

在旁注中,您应该更改各种过滤器功能以就地修改图像(首选),或者在每次创建新图像时处置旧图像。