我正在位图上创建一个圆圈,但想在其中有一个洞。经过半个小时的搜索,我只找到了将图像裁剪为圆形的方法。困难的是,中间的孔应该像图像的其余部分一样透明。
This https://i.stack.imgur.com/Avdrv.png是基础图像并且黄色圆圈 https://i.stack.imgur.com/OAGC5.png表示应添加的透明区域。
感谢您的任何帮助。
开始很简单:通过执行以下操作创建透明位图g.Clear(Color.Transparent)
然后用颜色绘制/填充一个圆圈。
下一步有点棘手:接下来你想要用透明度绘制孔。
为此,您需要将 Graphics 对象切换到右侧CompositingMode
;默认是SourceOver
但你想要SourceCopy
。前者overlays创建混合颜色的 alpha 值。后者将执行我们想要的操作:通过以下方式绘制孔copying绘制的颜色包括阿尔法就在旧的上面..
这是一个例子:
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 中的样子PictureBox
with a BackgroundImage
:
一些注意事项:
您还可以使用半透明画笔创建“有色”孔;但不要为此使用抗锯齿功能,因为它会引入彩色条纹。
我们在这里使用了简单的圆圈,但带有一个GraphicsPath
您可以创建和填充几乎任何形状和复杂程度的形状。
并使用一个GraphicsPath
也可以作为填充透明度的替代方案:first添加大和then路径将是较小的内椭圆用一个洞创建的填充它会得到完全相同的结果!但我发现上面的解决方案更有启发性。
最后注意事项:正如 clarkitect 所指出的,要保存,请使用支持透明度的格式。Png
总是推荐..
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)