C#图形在区域上绘制透明矩形

本文关键字:透明 绘制 图形 区域 | 更新日期: 2023-09-27 18:08:00

我有两个相互层叠的图像,希望能够清除顶部图像的一部分。通常,如果我想清除图像的一部分,我会通过将其绘制为背景色

g.FillRectangle(Brushes.White,x,y,width,height);

但如果我在顶部图像上这样做,底部图像的区域就会被白色矩形覆盖。我试着做

g.FillRectangle(Brushes.Transparent,x,y,width,height);

但这似乎并没有清除该地区以前的所有内容。有什么方法可以让那个区域的像素透明吗?

C#图形在区域上绘制透明矩形

//using System.Drawing.Drawing2D;
g.FillRectangle(Brushes.White,x,y,width,height);
g.CompositingMode = CompositingMode.SourceCopy;    
g.FillRectangle(Brushes.Transparent,x,y,width,height);

这是不可能的。

GDI+和Graphics类不支持分层绘制;覆盖上一张图像后,这些像素就消失了。

您应该通过调用占用两个矩形的DrawImage重载来重新绘制上一个图像中要显示的部分。

如果下部图像包含透明部分,则应首先通过调用FillRectangle将该区域清除为白色(或无论原始背景是什么(,以便正确覆盖透明度。

另一个选项是不直接绘制图像。用途:

System.Windows.Forms.PictureBox

这是的财产

Region

以改变图像的可见性/透明度。区域不需要是矩形。它可以从任何一组线中定义。

PS:Brushes.Transparent并不是真正意义上的透明,而是父容器的BackColor。

float[][] ptsArray ={
            new float[] {1, 0, 0, 0, 0},
            new float[] {0, 1, 0, 0, 0},
            new float[] {0, 0, 1, 0, 0},
            new float[] {0, 0, 0, 0.5f, 0},
            new float[] {0, 0, 0, 0, 1}};
            ColorMatrix clrMatrix = new ColorMatrix(ptsArray);
            ImageAttributes imgAttributes = new ImageAttributes();
            imgAttributes.SetColorMatrix(clrMatrix,
            ColorMatrixFlag.Default,
            ColorAdjustType.Bitmap);
            _ImageThumb.Height, imgAttributes);
            e.Graphics.DrawImage(_ImageThumb,new Rectangle(0, 0, _ImageThumb.Width,_ImageThumb.Height),0, 0, _ImageThumb.Width, _ImageThumb.Height,GraphicsUnit.Pixel, imgAttributes);

//使用集合剪辑&绘制的区域