1 回答

TA贡献1906条经验 获得超3个赞
开始很简单:通过执行 a 创建一个透明位图g.Clear(Color.Transparent),然后用一种颜色绘制/填充一个圆圈。
下一步有点棘手:接下来你想用透明度绘制孔。
为此,您需要将 Graphics 对象切换到右侧CompositingMode;默认是SourceOver但是你想要的SourceCopy。前者覆盖了创建混合颜色的 alpha 值。后者将做我们想做的事:通过将绘制的颜色(包括 alpha)复制到旧的颜色上来绘制洞。
这是一个例子:
Bitmap bmp = new Bitmap(500, 500);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.Transparent);
//g.SmoothingMode = SmoothingMode.AntiAlias;
g.CompositingMode = CompositingMode.SourceCopy;
g.FillEllipse(Brushes.DarkGreen, 100, 100, 300, 300);
g.FillEllipse(Brushes.Transparent, 200, 200, 100, 100);
}
pictureBox1.Image = bmp;
这是 a PictureBoxwith a 的样子BackgroundImage:
几点注意事项:
您还可以使用半透明画笔创建一个“着色”孔;但是不要为此使用抗锯齿,因为它会引入彩色边缘。
我们在这里使用了简单的圆圈,但
GraphicsPath
您可以创建和填充几乎任何形状和复杂性的形状。并且使用 a
GraphicsPath
也可以作为填充透明度的替代方法:首先添加大椭圆,然后添加较小的内椭圆,路径将创建一个带有孔的路径,填充它会得到完全相同的结果!但我发现上面的解决方案更有指导意义..最后说明:正如 clarkitect 所指出的,要保存,请使用支持透明度的格式。
Png
总是推荐..
- 1 回答
- 0 关注
- 284 浏览
添加回答
举报