在System.Drawing.Bitmap上将C#System.Drawing.Rectangle转换为Ellipse

时间:2016-01-06 02:37:38

标签: c# bitmap face-detection

我有一个面部识别库工作,给我一个矩形阵列。现在我用这种方式绘制矩形。

foreach (Rectangle box in boxes)
{
     for (int x = box.X; x <= box.X + box.Width; x++)
     {
          for (int y = box.Y; y <= box.Y + box.Height; y++)
          {
               outputbmp.SetPixel(x, y, Color.FromKnownColor(KnownColor.Red));
          }
     }
}

enter image description here

我正在寻找一些简单的东西:

Ellipse ellipse = new Ellipse(box); //cast rect to ellipse
outputbmp.DrawEllipse(ellipse);

看起来更像是:

enter image description here

椭圆的轮廓接触矩形角。

根据我上面使用的方法,很容易绘制一个矩形但是对于椭圆,它需要我知道椭圆中的所有点。只是想知道是否有什么可以让我的生活更轻松。

1 个答案:

答案 0 :(得分:1)

不要试图直接绘制到位图,你可以创建一个更高级别的对象,称为Graphics,为您提供各种精彩的绘图工具。它也会比逐像素绘制快得多。

您可以通过调用Graphics并传入位图来为给定的Bitmap创建Graphics.FromImage。你必须记住在图形上调用Dispose,否则它会泄漏资源。

获得位图的Graphics实例后,您可以调用DrawEllipse并完全按预期传入边界。

来自MSDN

private void DrawEllipseInt(Graphics g)
{
    // Create pen.
    Pen blackPen = new Pen(Color.Black, 3);

    // Create location and size of ellipse.
    int x = 0;
    int y = 0;
    int width = 200;
    int height = 100;

    // Draw ellipse to screen.
    g.DrawEllipse(blackPen, x, y, width, height);
}