C#和Alpha掩蔽中区域的抗锯齿
我想在给定的图片上画一个圆环。圆环体/环本身应以透明方式绘制。因为没有drawTorus,所以我使用图形路径来获得结果 这是我目前的代码:C#和Alpha掩蔽中区域的抗锯齿,c#,graphics,gdi+,gdi,antialiasing,C#,Graphics,Gdi+,Gdi,Antialiasing,我想在给定的图片上画一个圆环。圆环体/环本身应以透明方式绘制。因为没有drawTorus,所以我使用图形路径来获得结果 这是我目前的代码: Image bmp = Bitmap.FromFile(Application.StartupPath + "\\background.jpg"); Graphics g = Graphics.FromImage(bmp); g.SmoothingMode = SmoothingMode.AntiAlias; Rectangle r1 = new Rect
Image bmp = Bitmap.FromFile(Application.StartupPath + "\\background.jpg");
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
Rectangle r1 = new Rectangle(bmp.Width / 2 - bmp.Height / 2, 0, bmp.Height, bmp.Height);
Rectangle r2 = Rectangle.Inflate(r1, -50, -50);
GraphicsPath p1 = new GraphicsPath();
p1.AddEllipse(r1);
GraphicsPath p2 = new GraphicsPath();
p1.AddEllipse(r2);
Region re = new Region(p1);
re.Xor(p2);
g.FillRegion(new SolidBrush(Color.FromArgb(80,0,0,0)),re);
g.Save();
结果如下所示:
问题是,SmoothingMode被忽略。你可以在这里看到:
我读到这是因为区域不受SmoothingMode参数的影响
但如何修复呢
使用FillPath,您的问题就会得到解决
GraphicsPath path = new GraphicsPath();
path.AddEllipse(r1);
path.AddEllipse(r2);
using(Brush b = new SolidBrush(Color.FromArgb(80,0,0,0)))
g.FillPath(b, path);
不久前我遇到过同样的问题,我将尝试找到我的解决方案。一个区域应该有助于回答问题“这个像素是在该区域内还是在该区域外”,因此只支持是/否回答。它不支持“它位于边缘,因此位于中间内部和中间外部”,从而为您计算这些像素的alpha遮罩提供了空间。然而,这条路是不同的,如果你放弃去一个地区,只处理这条路,你应该能够处理它。@LasseV.Karlsen谢谢你的澄清。我误解了地域的概念,并低估了地域的可能性。谢谢哇!那太容易了。。。我没有想到,fillPath知道它必须填充两个椭圆之间的区域。因此我使用了区域和XOr。它检查不均匀交叉,所以添加第三个圆将再次填充第三个圆。你会找到更多关于它的信息。