C#图形在区域上绘制透明矩形
本文关键字:透明 绘制 图形 区域 | 更新日期: 2023-09-27 18:08:00
我有两个相互层叠的图像,希望能够清除顶部图像的一部分。通常,如果我想清除图像的一部分,我会通过将其绘制为背景色
g.FillRectangle(Brushes.White,x,y,width,height);
但如果我在顶部图像上这样做,底部图像的区域就会被白色矩形覆盖。我试着做
g.FillRectangle(Brushes.Transparent,x,y,width,height);
但这似乎并没有清除该地区以前的所有内容。有什么方法可以让那个区域的像素透明吗?
//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);
//使用集合剪辑&绘制的区域