【问题标题】:GDI arc with modification修改后的 GDI 弧
【发布时间】:2020-04-07 16:15:36
【问题描述】:

我对 GDI 有疑问。我在 WinForms 中完成。这是我得到的:

还有我的代码:

Graphics phantom = this.pictureBox1.CreateGraphics();
Pen blackPen = new Pen(Color.Black, 3);
Rectangle rect = new Rectangle(0, 0, 200, 150);
float startAngle = 180F;
float sweepAngle = 180F;
phantom.DrawArc(blackPen, rect, startAngle, sweepAngle);
phantom.Dispose();

我想得到这样的东西:

真的很抱歉我的绘画技巧。是否可以从弧本身创建这样的东西,还是我必须从椭圆中创建?我不知道该怎么做。欢迎任何提示。谢谢。

【问题讨论】:

  • 嗯,当然,这是由三个弧构成的。祝你数学计算交点好运。
  • 你有两个圆圈,我们称它们为上下。将上面的圆圈定义为 GraphicsPath 并将其传递给 Region 的构造函数。现在通过ExcludeClip 方法将该区域传递给e.Graphics。现在画下圆圈,由于剪裁,它会丢失顶部。
  • 接下来,Reset() 图形并在 GraphicsPath 中定义下方的圆圈。这次使用 Graphics.Clip(),然后画上圈。它只会在较低的圆形剪辑所在的位置可见。

标签: winforms gdi


【解决方案1】:

来自我在原帖中的 cmets:

你有两个圆圈,我们称它们为下和上。定义 上圆作为 GraphicsPath 并将其传递给 a 的构造函数 地区。现在通过 ExcludeClip 方法将该区域传递给 e.Graphics。 现在画下圆圈,它会丢失顶部,因为 的剪辑。接下来,重置()图形并定义较低的 GraphicsPath 中的圆圈。这次使用 Graphics.Clip(),然后追逐 画上圈。只有在 下圈夹是。

概念证明:

代码:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    Graphics phantom = e.Graphics;
    using (Pen blackPen = new Pen(Color.Black, 3))
    {
        Rectangle upper = new Rectangle(-50, -250, 300, 300);
        GraphicsPath upperGP = new GraphicsPath();
        upperGP.AddEllipse(upper);
        using (Region upperRgn = new Region(upperGP))
        {
            Rectangle lower = new Rectangle(0, 0, 200, 150);
            GraphicsPath lowerGP = new GraphicsPath();
            lowerGP.AddEllipse(lower);

            float startAngle = 180F;
            float sweepAngle = 180F;

            phantom.ExcludeClip(upperRgn);
            phantom.DrawArc(blackPen, lower, startAngle, sweepAngle);

            phantom.ResetClip();
            phantom.SetClip(lowerGP);
            phantom.DrawEllipse(blackPen, upper);
        }


    }
}

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多