【问题标题】:Draw custom ellipse in winform在winform中绘制自定义椭圆
【发布时间】:2015-11-17 17:21:28
【问题描述】:

System.DrawingSystem.Drawing.Drawing2D 中,我只能绘制水平或垂直形状。现在我想绘制自定义形状。

给定点 A、B、C、D 的坐标。我想画一个像图中蓝色的椭圆。

【问题讨论】:

  • 所以你必须做一些相当基本的数学运算。然后你需要做一个 TranslateTransform、RotateTransform,最后是 DrawEllispse。之后可能是 ResetTransform。

标签: c# winforms drawing shape


【解决方案1】:

以下示例取自MSDN

private void RotateTransformAngle(PaintEventArgs e)
{
    // Set world transform of graphics object to translate.
    e.Graphics.TranslateTransform(100.0F, 0.0F);

    // Then to rotate, prepending rotation matrix.
    e.Graphics.RotateTransform(30.0F);

    // Draw rotated, translated ellipse to screen.
    e.Graphics.DrawEllipse(new Pen(Color.Blue, 3), 0, 0, 200, 80);
}

【讨论】:

    【解决方案2】:

    正确的解决方法包括:

    • 计算中心
    • 使用Graphics.TranslateTransform将中心移到原点
    • 计算边界RectangleSizeLocation
    • 使用Graphics.RotateTransform 旋转画布
    • Graphics.DrawEllipse绘制椭圆
    • 重置Graphcis 对象

    这确实需要一点Math,但会产生真实且精细的椭圆......

    为了好玩,您可能还想玩一个便宜的、虚假的解决方案:我使用DrawClosedCurve 方法,有点紧张。

    为了测试,我添加了一个 TrackBar 集,其中包含 Maximum100

    大约 80 的值,即大约 0.8fTensions 创建漂亮的椭圆体:

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        List<Point> points1 = new List<Point>()
        { new Point(300, 100), new Point(500, 300), new Point(400, 500), new Point(200, 300) };
    
        List<Point> points2 = new List<Point>() 
        { new Point(100, 100), new Point(500, 100), new Point(500, 400), new Point(100, 400) };
    
        e.Graphics.DrawClosedCurve(Pens.Red, points1.ToArray(), 
            (float)(trackBar1.Value / 100f), System.Drawing.Drawing2D.FillMode.Alternate);
    
        e.Graphics.DrawClosedCurve(Pens.Blue, points2.ToArray(), 
            (float)(trackBar1.Value / 100f), System.Drawing.Drawing2D.FillMode.Alternate);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-13
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多