8

文字列を Graphics.DrawString() に渡す前に、各文字がどこにあるかを正確に知りたいと思います。オフセットと幅だけでなく、衝突検出を行うことができるように、上昇/下降が考慮された正確な境界ボックスです。 Graphics.MeasureString() が私に与えている行の高さ全体を使用するのではなく、文字レベルで。

各文字の境界ボックスを正確に返す例が見つからないようです。これは c#/GDI+ でどのように行うことができますか?

理想的には、この画像のようにグレーの Rectangles をそれぞれ取得したいと思います。

ここに画像の説明を入力

4

6 に答える 6

0

「実際の」ウィンドウとまったく同じサイズとフォント設定で、測定用の非表示ウィンドウを作成します。その後、より多くのデータをブレンドすることで、キャラクターの個々のバウンディング ボックスを差し引くことができます。

  • 個々の文字の選択範囲の長方形で、文字の左右の境界を示すことができます。残念ながら、これの高さは行の高さ全体です
  • MeasureCharacterRanges() または同様の手法からのデータからの高さ

@Jason Williamsに同意します。「パディングとファッジ係数」は、結果を少し歪める可能性があります。

于 2013-08-28T22:57:33.127 に答える