0

我想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;

椭圆结果

4

1 回答 1

2

默认情况下, 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));
}

在此处输入图像描述

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

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

..应该做..

于 2018-05-28T23:29:43.003 回答