Graphics.DrawString メソッドで文字が斜体にならないことがある

こんにちは、Visual Studio サポート チームです。

今回は、前回ご紹介した「Graphics.DrawString メソッドで游ゴシック・游明朝の文字を縦書きした際の描画位置が OS によって異なる」と同様に、Graphics.DrawString メソッドを利用した際の不具合についてお知らせします。

前回と重複した記載がありますこと、予めご了承ください。

 

現象

Graphics.DrawString メソッドでは、引数の Font クラスに対して、FontStyle.Italic を指定することにより、文字を斜体にすることができます。

しかしながら、FontStyle.Italic と FontStyle.Bold をともに指定した場合、Windows 8 以降の OS では、フォントによっては文字が斜体になりません。

本現象が発生するフォントは、以下の 4 種類です。

  • 游明朝
  • 游明朝 Light
  • 游明朝 Demibold
  • 游ゴシック Light

Windows 7 では、以下のとおりです。 図1

Windows 8 では、以下のとおりです。 図2

 

原因

本現象は、Graphics.DrawString メソッドが内部で利用している GDI+ モジュールとフォントの組み合わせで発生する不具合に起因して発生しています。

弊社製品の不具合によりお客様にご迷惑をおかけしておりますこと、深くお詫び申し上げます。

.NET Framework のバージョンとの関連性はないため、.NET Framework のバージョンに関係なく発生します。

また、本現象に関する GDI+ の動作を変更可能なプロパティやメソッドはないため、回避方法はありません。

マイクロソフトではこの問題を製品の不具合と認識しておりますが、現状では、修正プログラムは提供されておりません。

 

参考

Graphics.DrawString メソッドのほかに、System.Windows.Forms 名前空間にある、TextRenderer.DrawText メソッドでも文字列を描画することができます。

Graphics.DrawString メソッドとの違いは、Graphics.DrawString メソッドが GDI+ を使ってテキスト描画しているのに対して、TextRenderer.DrawText メソッドは GDI を使用している点です。

この違いから、本件のように、GDI+ にて発生する不具合の場合は、TextRenderer.DrawText メソッドでは発生しません。

通常の Graphics.DrowString メソッドの呼び出しであれば、TextRenderer.DrawText メソッドを代わりにご利用いただくことが可能です。

ただ、TextRenderer.DrawText メソッドは、印刷に使用することはできませんのでご注意ください。