猿问

删除图像的圆形透明部分 c#

我正在位图上创建一个圆圈,但想在其中有一个洞。搜索半小时后,我才找到将图像裁剪为圆形的方法。困难的是,中间的孔应该像图像的其余部分一样透明。

这是基础图像

黄色圆圈代表应该添加的透明区域。

http://img1.mukewang.com/61da92d50001031011491067.jpg

感谢您提供任何帮助。


绝地无双
浏览 285回答 1
1回答

一只名叫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总是推荐..
随时随地看视频慕课网APP
我要回答