C#.NET中的粗线绘制问题

时间:2011-08-12 17:55:37

标签: c# graphics system.drawing

我想使用Graphics.Lines()方法绘制粗线。但看起来API有一些错误。如果您尝试使用以下代码呈现用户控件,您将获得奇怪的图像。我想知道是否有一些平滑模式或类似的东西可以照顾这个线条图故障。

private void UserControl1_Paint(object sender, PaintEventArgs e)
    {
        int n = 100;
        Point[] points = new Point[n];

        double x = 2;
        int y = 50;

        for (int i = 0; i < n; i++)
        {
            Point p = new Point();
            p.X = 200 + (int)(i * x);
            p.Y = 200 + (int)(Math.Sin(i * 0.2) * y);
            points[i] = p;
        }

        Pen pen = new Pen(new SolidBrush(Color.Blue));
        //Pen pen = new Pen(new LinearGradientBrush(new Point(0, 0), new Point(0, 100), Color.Black, Color.Red));
        pen.Width = 200;
        e.Graphics.DrawLines(pen, points);
    }

2 个答案:

答案 0 :(得分:6)

你看到GDI +试图在线上绘制终端上限的效果。如此厚厚的笔不会达到一个好的结局。关于你从达芬奇用扫帚画蒙娜丽莎的想象。修正:

        Pen pen = new Pen(new SolidBrush(Color.Blue));
        pen.EndCap = System.Drawing.Drawing2D.LineCap.Square;
        pen.StartCap = System.Drawing.Drawing2D.LineCap.Square;

或者绘制一个多边形,这样GDI +可以更好地了解正面和背面的内容:

        e.Graphics.DrawPolygon(pen, points);

嗯,它看起来不再像魔鬼了。保持线宽与线条中的细节成比例。

答案 1 :(得分:4)

以下是使用宽度为200(像素)的笔进行代码绘制的结果:

200 pen width

这里宽度为2:

2 pen width

pen width property通常是像素,但它基于Graphics对象的PageUnit属性(本身为GraphicsUnit属性)。检查以确保将这些值设置为您想要的值。