我有一个位图,我想将透明度应用于多边形定义的特定区域。这不是问题所在。我目前面临的问题是如何将透明度应用于多边形的反转区域。我试过使用Bitmap.SetPixel(),但这太慢了。这是我目前适用于普通多边形的方法:
public Bitmap Mask(Bitmap b, Point[] mask, bool invert)
{
Bitmap ret = new Bitmap(width, height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(ret);
g.Clear(Color.FromArgb(255,255,255,255));
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawImage(b, 0, 0, width, height);
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
g.FillPolygon(new SolidBrush(Color.Transparent), mask);
return ret;
}
我找到了解决方案。
我将TextureBrush
与Bitmap b as a texture
一起使用,并在透明背景上绘制多边形,最终创建反多边形效果。
Bitmap ret = new Bitmap(width, height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(ret);
g.Clear(Color.FromArgb(0,255,255,255));
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
if (!invert)
{
g.DrawImage(b, 0, 0, width, height);
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
g.FillPolygon(new SolidBrush(Color.Transparent), mask);
}
else g.FillPolygon(new TextureBrush(b), mask);
return ret;