1

アンチエイリアスをオンにすると破線のペンが干渉するのはなぜですか?

代替テキスト
(出典: googlepages.com )

4

1 に答える 1

4

これは、幅が 0 のペンを作成してからスケーリングする際の問題だと思います。私が見ているように、これを回避するには2つの方法があります。

  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);
}
于 2009-05-07T14:36:00.860 に答える