Сглаживание SmoothingMode искажает пунктирную ручку

StackOverflow https://stackoverflow.com/questions/834814

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

<Ол>
  • Создайте перо с большей шириной. Я обнаружил, что на 0.38f штрихи в сглаженной линии начали правильно масштабироваться.
  • Преобразуйте значения вручную в свойстве 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);
    }
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top