アンチエイリアスされたSmoothingModeは破線のペンをゆがめます
質問
アンチエイリアスを有効にすると、破線のペンが干渉されるのはなぜですか?
(ソース: googlepages.com )
解決
これは、幅が0のペンを作成してからスケーリングする場合の問題だと思います。私が見るように、これを回避するには2つの方法があります:
- より幅の広いペンを作成します。 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);
}
所属していません StackOverflow