我有一个以不同方式编辑图像的程序...每次执行此操作时都会调用一个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方法中。关于如何更好地设计这个的任何想法?
答案 0 :(得分:2)
你应该尽快保持你的油漆事件。
您应该将最终图像存储在类中的字段中,并在选项更改时重新生成它 然后,您可以使用简单的PictureBox替换整个Paint事件。
在旁注中,您应该更改各种过滤器功能以就地修改图像(首选),或者在每次创建新图像时处置旧图像。