我要在位图上创建一个Circle,但想在其中留一个孔。进行了半个小时的搜索后,我只找到了将图像裁剪为圆形的方法。困难的是,中间的孔应该与图像的其余部分一样透明。
This是基础图像,the yellow circle代表应添加的透明区域。
感谢任何帮助。
答案 0 :(得分:0)
开始很简单:先做一个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;
这是PictureBox
和BackgroundImage
中的样子:
一些注意事项:
您还可以使用半透明笔刷创建“有色”孔;不过,请勿为此使用抗锯齿功能,因为它会引入彩色条纹。
我们在这里使用了简单的圆形,但是通过GraphicsPath
,您可以创建和填充几乎任何形状和复杂性的形状。
使用GraphicsPath
代替透明填充也可以:通过首先添加较大的内容,然后然后添加较小的内部内容椭圆形路径将创建有孔,并且填充该路径将具有完全相同的结果!但是我发现上述解决方案更具启发性。.
最后的注释:如clarkitect所述,为保存起见,请使用支持透明性的格式。始终建议使用Png
。