所以我正在从事一个项目,而我目前正在图像部分进行最后的润色。但是问题来了。当我点击翻转图像的复选框时,它会翻转。
但是当我单击“接受”按钮(这是将图像保存到对象集合中)时,会发生这种情况:
我使用了Visual Studio的调试器,我认为问题是,pictureBox的onPaint再次被调用了很多次,因此Image Drawing的方法也被调用了。所以我的问题是,如何防止这种情况发生?
图像绘制方法
public LayerClass ImageDrawing(LayerClass.Type img, Bitmap bm, RectangleF imgRect, String filepath, int angle, PaintEventArgs e, PointF location, bool flip)
{
bm = (Bitmap)Image.FromFile(filepath);
bm = new Bitmap(bm, (int)imgRect.Width, (int)imgRect.Height); //Scaling Image
bm = ImageClass.GrayscaleImage(bm); //Grayscale
bm = MakeTransparentImage(bm); //Transparent
bm = RotateImage(bm, angle);
if (flip)
bm.RotateFlip(RotateFlipType.RotateNoneFlipX);
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
e.Graphics.CompositingQuality = CompositingQuality.HighSpeed;
imgRect.Size = new SizeF(bm.Width, bm.Height);
e.Graphics.DrawImage(bm, imgRect.X - (bm.Width / 2), imgRect.Y - (bm.Height / 2));
this.imageBitmap = bm;
this.filePath = filePath;
this.rotationAngle = angle;
this.location = location;
this.imageRect = imgRect;
this.flipped = flip;
return new LayerClass(LayerClass.Type.Image, this, filePath, imgRect, location, flip);
}
答案 0 :(得分:0)
您的问题是,您在画布上绘制了图像,但没有删除以前绘制的图像。
这样想:如果您在一张纸上画一些东西,然后又想画一些新的东西,但又不想用新的东西,那么最终您的旧画将在新画的下面。
您的代码现在就像这样工作。
因此,相反,在绘制翻转的图像之前,您首先必须擦除旧图像。
最简单的方法是打电话
e.Graphics.Clear(this.Background); //Use any color you want.
致电之前
e.Graphics.DrawImage