我有两个图像叠在彼此的顶部,并希望能够清除顶部图像的一部分。通常,如果我想清除图像的一部分,我只需要通过
将其绘制为背景颜色g.FillRectangle(Brushes.White,x,y,width,height);
但如果我在顶部图像上执行此操作,则底部图像的区域会被白色矩形覆盖。我试着做了
g.FillRectangle(Brushes.Transparent,x,y,width,height);
但这似乎并没有清除所有以前内容的区域。有什么办法可以让那个区域的像素透明吗?
答案 0 :(得分:3)
//using System.Drawing.Drawing2D;
g.FillRectangle(Brushes.White,x,y,width,height);
g.CompositingMode = CompositingMode.SourceCopy;
g.FillRectangle(Brushes.Transparent,x,y,width,height);
答案 1 :(得分:2)
这是不可能的。
GDI +和Graphics
类不支持分层绘图;一旦你覆盖了上一张图片,那些像素就会消失。
您应该通过调用带有两个矩形的DrawImage
重载来重新绘制您想要显示的上一个图像部分。
如果下方图像包含透明部分,则应首先通过调用FillRectangle
将该区域清除为白色(或原始背景),以便正确覆盖透明度。
答案 2 :(得分:2)
另一种选择是不直接绘制图像。使用:
System.Windows.Forms.PictureBox
和它的属性
Region
更改图像的可见性/透明度。区域不必是矩形。它可以从任何一组行定义。
PS:Brushes.Transparent
并不意味着透明,而是父容器的BackColor。
答案 3 :(得分:0)
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);
//使用set clip&要绘制的区域