删除图像c#的圆形透明部分
Remove a round transparent section of an Image c#
我正在位图上创建一个圆,但想在其中打一个洞。搜索半小时后,我只找到了将图像裁剪成圆形的方法。困难的是,中间的孔应该像图像的其余部分一样透明。
This is the base image and the yellow circle表示应该添加的透明区域
感谢您的帮助。
开始很简单:通过执行 g.Clear(Color.Transparent)
然后 draw/fill 一个颜色的圆来创建透明位图。
下一步有点棘手:接下来你要用透明度绘制孔。
为此,您需要将 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
的样子:
一些注意事项:
你也可以使用半透明画笔创建一个'tinted'洞;但是不要为此使用抗锯齿,因为它会引入彩色条纹。
我们在这里使用了简单的圆圈,但是使用 GraphicsPath
您可以创建和填充几乎任何形状和复杂度的形状..
并且使用 GraphicsPath
也可以替代填充透明度:通过 first 添加大和 然后 较小的内部椭圆路径会创建一个洞并填充它会有完全相同的结果!但是我发现上面的解决方案更有启发性..
最后说明:正如 clarkitect 指出的那样,要保存,请使用支持透明的格式。始终推荐 Png
..
我正在位图上创建一个圆,但想在其中打一个洞。搜索半小时后,我只找到了将图像裁剪成圆形的方法。困难的是,中间的孔应该像图像的其余部分一样透明。
This is the base image and the yellow circle表示应该添加的透明区域
感谢您的帮助。
开始很简单:通过执行 g.Clear(Color.Transparent)
然后 draw/fill 一个颜色的圆来创建透明位图。
下一步有点棘手:接下来你要用透明度绘制孔。
为此,您需要将 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
的样子:
一些注意事项:
你也可以使用半透明画笔创建一个'tinted'洞;但是不要为此使用抗锯齿,因为它会引入彩色条纹。
我们在这里使用了简单的圆圈,但是使用
GraphicsPath
您可以创建和填充几乎任何形状和复杂度的形状..并且使用
GraphicsPath
也可以替代填充透明度:通过 first 添加大和 然后 较小的内部椭圆路径会创建一个洞并填充它会有完全相同的结果!但是我发现上面的解决方案更有启发性..最后说明:正如 clarkitect 指出的那样,要保存,请使用支持透明的格式。始终推荐
Png
..