DrawEllipse:椭圆超出位图大小

时间:2018-05-28 23:23:13

标签: c# winforms graphics bitmap drawellipse

我想在指定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;

drawellipse result

1 个答案:

答案 0 :(得分: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));
}

enter image description here

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

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

..应该做..