DrawEllipse: Ellipse выходит за рамки размера растрового изображения - PullRequest
0 голосов
/ 29 мая 2018

Я хочу нарисовать круг с 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 голосов
/ 29 мая 2018

По умолчанию перо имеет 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

.. следует сделать ..

...