图像再次绘制

时间:2018-10-29 05:29:29

标签: c# image-processing

所以我正在从事一个项目,而我目前正在图像部分进行最后的润色。但是问题来了。当我点击翻转图像的复选框时,它会翻转。

赞: enter image description here

但是当我单击“接受”按钮(这是将图像保存到对象集合中)时,会发生这种情况:

enter image description here

我使用了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);
    }

1 个答案:

答案 0 :(得分:0)

您的问题是,您在画布上绘制了图像,但没有删除以前绘制的图像。

这样想:如果您在一张纸上画一些东西,然后又想画一些新的东西,但又不想用新的东西,那么最终您的旧画将在新画的下面。

您的代码现在就像这样工作。

因此,相反,在绘制翻转的图像之前,您首先必须擦除旧图像。

最简单的方法是打电话

e.Graphics.Clear(this.Background); //Use any color you want.

致电之前

e.Graphics.DrawImage