GDI+ を使用した描画時に、予期せぬ描画結果となる

現象
GDI+ において、Graphics.ScaleTransform メソッドによるオブジェクトのスケーリングを行った上でカスタム線種により破線を描画すると、予期せぬ描画結果となる場合があります。具体的には、ピッチが短くなったり、各点が丸みを帯びた形状になったりします。また、線幅を 0 とすると線がつながったように見えることがあります。
原因
この現象は、GDI+ における想定された動作であり、GDI+ の描画アルゴリズムによって発生します。 
GDI+ では、Graphics.ScaleTransform メソッドにより拡大縮小が行われる場合、Graphics オブジェクトのプロパティやピクセルの情報などを基に最終的な描画結果を計算します。しかしながら、その計算の結果により破線の隙間や線の太さなどが変化し、描画結果が変化する場合があります。
なお、本動作は、GDI+ の描画アルゴリズムに基づく仕様上の動作です。

解決方法
本動作を回避するためには、想定される描画結果に近づくように、プロパティなどを調整する必要があります。
GDI+ の描画アルゴリズムについては公開されておらず、また、描画される線によっても結果が異なるため、どの場合にも対処できるような方法はありません。
たとえば、 以下のような方法があります。

  • Pen の色に対するアルファ値を変更する。
    Pen pen(Color(250, 255, 0, 0), 0);
  • Graphics.SmoothingMode プロパティを SmoothingModeAntiAlias へ変更する。
    Graphics.SetSmoothingMode(SmoothingModeAntiAlias);

状況
本動作は、GDI+ の描画アルゴリズムに基づく仕様上の動作です。
詳細

.NET Framework の System.Drawing.Graphics クラスは、GDI+ の機能をカプセル化しているため、本問題の影響を受ける場合があります。

GDI+ については、以下の技術情報を参照してください。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms533798.aspx
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2821906 - 最終更新日: 09/29/2016 14:53:00 - リビジョン: 7.0

Microsoft Win32 Application Programming Interface

  • KB2821906
フィードバック