一只名叫tom的猫
开始很简单:通过执行 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您可以创建和填充几乎任何形状和复杂性的形状。并且使用 aGraphicsPath也可以作为填充透明度的替代方法:首先添加大椭圆,然后添加较小的内椭圆,路径将创建一个带有孔的路径,填充它会得到完全相同的结果!但我发现上面的解决方案更有指导意义..最后说明:正如 clarkitect 所指出的,要保存,请使用支持透明度的格式。Png总是推荐..