PS_USERSTYLEを使用して点線を描画したデータを EMF 形式で保存した場合、Win32 API の PlayEnhMetaFile 関数と.NET Framework の Graphics.DrawImage メソッドの表示に差異が出る

適用対象: Microsoft Windows XP Home EditionMicrosoft Windows XP ProfessionalMicrosoft Windows XP Service Pack 3 詳細

現象


ExtCreatePen 関数でペン スタイルとしてPS_USERSTYLEを使用して点線を描画したデータを EMF 形式で保存した場合、Win32 API の PlayEnhMetaFile 関数と.NET Framework の Graphics.DrawImage メソッドの表示に差異が出る場合があります。

原因


GDIで作成された EMF 形式のデータを GDI+ を使用する .NET Framework の Graphics.DrawImage メソッドで表示する場合、内部でデータの翻訳処理が行われます。
ExtCreatePen 関数でペン スタイルとしてPS_USERSTYLEを使用して点線を描画した場合、ユーザーが独自に用意したスタイル配列が参照されます。このスタイル配列を高解像度のメタファイルで取り扱う場合、 GDI+ が EMF 形式のデータを翻訳する過程で PS_USERSTYLE に関する数値の丸め誤差が発生することによって表示に差異が発生することがあります。

状況


この動作は仕様です。