我想用抗锯齿在指定的位图上画一个圆。
SmoothingMode.AntiAlias问题是,当我使用PenAlignment.Inset时,抗锯齿功能不能正常工作!
相反,使用PenAlignment.Center,它可以正常工作...
有什么解决这个问题的建议吗?
Bitmap layer = new Bitmap(80, 80);
using (Graphics g = Graphics.FromImage(layer))
{
using (Pen p = new Pen(Color.Black, 4))
{
p.Alignment = PenAlignment.Inset;
g.SmoothingMode = SmoothingMode.AntiAlias;
g.DrawEllipse(p, new Rectangle(0, 0, layer.Width, layer.Height));
}
}
pictureBox3.Size = new Size(100, 100);
pictureBox3.Image = layer;


(请注意左图中的bug)
发布于 2018-05-29 13:03:32
缩小边框1/2的笔触宽度应该可以解决这个问题。所谓“放气”,我的意思是将所有4个边向矩形的中心拉1/2笔宽:
float halfPenWidth = p.Width*0.5f;
g.DrawEllipse(p, new RectangleF(halfPenWidth, halfPenWidth, layer.Width - p.Width, layer.Height - p.Width));或者插入4的硬编码笔宽:
g.DrawEllipse(p, new Rectangle(2, 2, layer.Width - 4, layer.Height - 4));请注意,必须从矩形的宽度和高度中减去完整的笔宽,以便将右侧和底部拉入1/2笔宽,同时保持矩形在同一点上居中。
使用此代码并将笔对齐居中,1/2的笔划宽度将在椭圆接触矩形的点处绘制在矩形外部,但它仍将绘制在位图内部。
https://stackoverflow.com/questions/50575461
复制相似问题