Задача рисования толстых линий в C # .NET - PullRequest
1 голос
/ 12 августа 2011

Я хотел нарисовать толстые линии, используя метод 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 ]

6 голосов
/ 12 августа 2011

Вы видите эффект 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);

Ну, это больше не похоже на дьявола.Сохраняйте ширину линии пропорциональной деталям в линии.

4 голосов
/ 12 августа 2011

Вот результат рисования вашего кода с помощью пера шириной 200 (пикселей):

200 pen width

И вот оно на ширине 2:

2 pen width

Свойство ширина пера обычно составляет пиксели, но оно основано на свойстве PageUnit объекта Graphics (само по себе свойство GraphicsUnit ). Убедитесь, что вы установили эти значения на то, что вам нужно.

...