MeasureString() メソッドを用いてテキストのサイズを計算すると実際より大きいサイズが返される

Graphics.MeasureString() メソッドでは、独立した文字列で使用するようにデザインされています。そのため、グリフの突出に対応するための量の余白が文字の前後に含まれた大きさを返します。したがって本来画面に描画される範囲より若干大きいサイズが返されます。

数値の返却例

例1

入力テキスト戻り値
"P" 11
"PP" 19
"PPP" 26
"PPPP" 34
"PPPP" 42

文字の前後に空白を入れたサイズが返るため、本来の"P"のサイズは8ですが、前後に2pixel程度の余白がついた値が返されます。

余白を含めないサイズを求めたい

余白を含めないサイズを求める場合は、

  • Graphics.MeasureCharacterRanges() メソッド
  • TextRenderer.MeasureText() メソッドでTextFormatFlags.NoPadding を指定する
  • Windows APIの GetTextExtentPoint32() 関数を呼び出す

のいずれかの方法を用いると取得できます。

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2014-10-16
Copyright © 1995–2025 iPentec all rights reserverd.