Сглаживание SmoothingMode искажает пунктирную ручку - PullRequest
1 голос
/ 07 мая 2009

Почему включение сглаживания мешает моей пунктирной ручке?

alt text
(источник: googlepages.com )

1 Ответ

4 голосов
/ 07 мая 2009

Я считаю, что это проблема с созданием пера с шириной 0, а затем с масштабированием. На мой взгляд, есть два способа обойти это:

  1. Создайте перо с большей шириной. Я обнаружил, что в 0.38f штрихи в сглаженной линии начали масштабироваться правильно.
  2. Преобразование значений вручную в свойстве DashPattern пера.

Вы можете сделать последний обходной путь с небольшим количеством кода C # 3.0:

protected override void OnPaint(PaintEventArgs e)
{
    Graphics g = e.Graphics;
    using (Pen p = new Pen(Color.Black, 0.0f))
    {
        p.DashStyle = DashStyle.Dash;

        g.ScaleTransform(4.0f, 4.0f);

        g.DrawLine(p, 5.0f, 5.0f, 55.0f, 5.0f);

        g.SmoothingMode = SmoothingMode.AntiAlias;
        p.DashPattern = Array.ConvertAll(p.DashPattern, d => d * 4.0f);
        g.DrawLine(p, 5.0f, 10.0f, 55.0f, 10.0f);
    }

    base.OnPaint(e);
}
...