C# 移除图像c的圆形透明部分#
我正在位图上创建一个圆,但希望在其中有一个孔。经过半个小时的搜索,我只找到了将图像裁剪成圆形的方法。最困难的是,中间的孔应该像图像的其余部分一样透明。 是基础图像,表示应添加的透明区域C# 移除图像c的圆形透明部分#,c#,bitmap,transparency,system.drawing,C#,Bitmap,Transparency,System.drawing,我正在位图上创建一个圆,但希望在其中有一个孔。经过半个小时的搜索,我只找到了将图像裁剪成圆形的方法。最困难的是,中间的孔应该像图像的其余部分一样透明。 是基础图像,表示应添加的透明区域 感谢您的帮助。开始很简单:通过执行g.Clear(Color.transparent)创建一个透明位图,然后用颜色绘制/填充一个圆圈 下一步有点棘手:下一步要用透明度绘制孔 为此,您需要将图形对象切换到右侧的合成模式;默认值为SourceOver,但您需要SourceCopy。前一个覆盖了创建混合颜色的alpha
感谢您的帮助。开始很简单:通过执行
g.Clear(Color.transparent)
创建一个透明位图,然后用颜色绘制/填充一个圆圈
下一步有点棘手:下一步要用透明度绘制孔
为此,您需要将图形对象切换到右侧的合成模式
;默认值为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;
这是具有背景图像的图片盒中的外观:
请注意:
- 您还可以使用半透明笔刷创建“着色”孔;但不要使用抗锯齿,因为它会引入彩色条纹
- 我们在这里使用了简单的圆圈,但使用
图形SPAH
可以创建和填充几乎任何形状和复杂度的形状
- 使用
GraphicsPath
也可以作为透明填充的替代方法:首先添加大的和,然后较小的内部椭圆,路径将创建一个洞,填充它将得到非常相同的结果!但我发现上面的解决方案更有启发性
- 最后一点注意:正如clarkitect所指出的,要保存,请使用支持透明度的格式<始终建议使用代码>Png
位图不支持透明度。幸运的是,您在问题中链接的图像不是位图,而是支持透明度的PNG图像。我建议你大量编辑你的问题,用“png”代替提及的“位图”。我冒昧地用png
替换了bitmap
标签,希望它能吸引到合适的专家:)好吧`新位图(20482048,System.Drawing.Imaging.PixelFormat.Format32bppArgb)`对我来说非常好而且是透明的@克拉克:不要将BMP文件格式与GDI位图对象混淆@太晚了;我已经这么做了。好吧,那你还有什么建议呢?非常感谢,我从来没有想到过这样的事情!