DrawEllipse:椭圆超出位图大小

DrawEllipse: Ellipse goes outside of the Bitmap size

我想在指定的 Bitmap 上用 DrawEllipse 绘制一个与 Bitmap 大小相同的圆,但结果是圆的边缘被剪掉了。
为什么会出现这个问题?

Bitmap layer = new Bitmap(80, 80);
using (Graphics g = Graphics.FromImage(layer))
{
    using (Pen p = new Pen(Color.Black, 4))
    {
        g.DrawEllipse(p, new Rectangle(0, 0, layer.Width, layer.Height));
    }
}
pictureBox3.Size = new Size(100, 100);
pictureBox3.Image = layer;

默认情况下,Pen 具有 PenAlignment.Center

这意味着它的一半宽度将绘制在边界矩形之外。

您只需将其更改为 PenAlignment.Inset:

即可避免此问题
using (Pen p = new Pen(Color.Black, 4) { Alignment = PenAlignment.Inset})
{
    g.DrawEllipse(p, new Rectangle(0, 0, layer.Width, layer.Height));
}

更新: 如果要为图形对象打开平滑功能,您需要在笔划的两侧增加 1 或 2 个额外的像素以用于抗锯齿像素。现在无法避免使用较小的边界矩形。但是..:

Rectangle rect = new Rectangle(Point.Empty, layer.Size);
rect.Inflate(-1, -1);  // or -2

..应该做..