1

我正在尝试在位图上绘制半圆和部分圆(全黑线)。

我的预期结果如下所示:
在此处输入图像描述

我的当前结果如下所示:
在此处输入图像描述

我尝试了很多不同的替代方案,但看起来总是不对。

using (var b = new Bitmap(200, 100, PixelFormat.Format24bppRgb))
{
   using (var g = Graphics.FromImage(b))
   {
      g.FillRectangle(new SolidBrush(Color.LightGray), 0, 0, 200, 100);

      // RED COLOR   
      Rectangle rec = new Rectangle(-15, 50, 70, 100);
      g.DrawRectangle(new Pen(Color.Red, 1f), rec);
      g.DrawArc(new Pen(Color.Red, 3f), rec, 50, 100);

      // WHITE COLOR   
      Rectangle rec = new Rectangle(10, 50, 70, 70);
      g.DrawRectangle(new Pen(Color.White, 1f), rec);
      g.DrawEllipse(new Pen(Color.White, 3f), rec);
   }
}

但它总是看起来完全错误,在玩了几个小时后,我找不到控制输出的方法。

问题:
有没有一种简单的方法可以使用 C# 在图形对象中设计我的 INTENDED 图像上的 3 条黑线?

4

2 回答 2

1

实现这一点的简单方法是绘制三个同心圆,并让剪裁处理其中两个落在绘图区域之外的事实。

实现你想要的基于圆弧的绘图的方法可能是从同心圆开始(所以你知道你在正确的地方有矩形),然后将 DrawEllipse 更改为 DrawArc,将起始角和扫角设置为右侧价值观。

起始角度以 x 轴(圆中心右侧的水平线)为单位测量,因此对于较小的弧,您需要大约 305 度的角度。从那里你需要它画大约 90 度。外圆弧将相似,但圆弧更小,因此它可能从大约 330 度开始扫过大约 60 度。

于 2014-05-15T18:01:11.980 回答
0

似乎解决方案是在位图边界之外绘制一个矩形并使用graphic.DrawEllipse方法绘制曲线。

这是工作代码的片段:

    Pen pen = new Pen(Color.White);

    Rectangle rec = new Rectangle(-30, 50, 100, 100);
    g.DrawEllipse(pen, rec);
    rec = new Rectangle(-30, 10, 150, 150);
    g.DrawEllipse(pen, rec);
    rec = new Rectangle(-30, -30, 200, 200);
    g.DrawEllipse(pen, rec);

非常感谢 Hans Passant 向我指出了这种思路。

于 2014-05-15T18:00:47.843 回答