Pergunta

Por que ligar anti-aliasing interferir com a minha caneta pontilhada?

text alt
(fonte: googlepages.com )

Foi útil?

Solução

Eu acredito que este é um problema com a criação de uma caneta com um 0 largura e, em seguida, escalar. A meu ver, há duas maneiras para resolver este:

  1. Criar a caneta com uma largura maior. Descobri que a 0.38f os traços na linha de anti-aliasing começou a escalar corretamente.
  2. manualmente transformar os valores na propriedade DashPattern do Pen.

Você pode fazer o último solução com um pouco de C # 3.0 código:

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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top