为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
绝地无双 2022-01-09 15:45:50
我正在位图上创建一个圆圈,但想在其中有一个洞。搜索半小时后,我才找到将图像裁剪为圆形的方法。困难的是,中间的孔应该像图像的其余部分一样透明。这是基础图像黄色圆圈代表应该添加的透明区域。感谢您提供任何帮助。
查看完整描述

1 回答

?
一只名叫tom的猫

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:

//img1.sycdn.imooc.com//61da92ec00011c4605000499.jpg

几点注意事项:

  • 您还可以使用半透明画笔创建一个“着色”孔;但是不要为此使用抗锯齿,因为它会引入彩色边缘。

  • 我们在这里使用了简单的圆圈,但GraphicsPath您可以创建和填充几乎任何形状和复杂性的形状。

  • 并且使用 aGraphicsPath也可以作为填充透明度的替代方法:首先添加大椭圆,然后添加较小的内椭圆,路径将创建一个带有孔的路径,填充它会得到完全相同的结果!但我发现上面的解决方案更有指导意义..

  • 最后说明:正如 clarkitect 所指出的,要保存,请使用支持透明度的格式。Png总是推荐..


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 284 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号