删除Image c#的圆形透明部分

时间:2018-09-09 12:33:29

标签: c# bitmap transparency system.drawing

我要在位图上创建一个Circle,但想在其中留一个孔。进行了半个小时的搜索后,我只找到了将图像裁剪为圆形的方法。困难的是,中间的孔应该与图像的其余部分一样透明。

This是基础图像,the yellow circle代表应添加的透明区域。

感谢任何帮助。

1 个答案:

答案 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;

这是PictureBoxBackgroundImage中的样子:

enter image description here

一些注意事项:

  • 您还可以使用半透明笔刷创建“有色”孔;不过,请勿为此使用抗锯齿功能,因为它会引入彩色条纹。

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

  • 使用GraphicsPath代替透明填充也可以:通过首先添加较大的内容,然后然后添加较小的内部内容椭圆形路径将创建有孔,并且填充该路径将具有完全相同的结果!但是我发现上述解决方案更具启发性。.

  • 最后的注释:如clarkitect所述,为保存起见,请使用支持透明性的格式。始终建议使用Png