3

以下を使用してテキストの幅の観点からサイズを計算すると、500と表示されます

intWidth = (int)objGraphics.MeasureString(String.concat(sImageText1, sImageText2), objFont).Width;

しかし、もし私がこれを好きなら

intWidth = (int)objGraphics.MeasureString(sImageText1, objFont).Width + (int)objGraphics.MeasureString(sImageText2, objFont).Width;

私は多くのことを検索し、さまざまなシナリオを実行しましたが、「MeasureString」を使用して文字列の幅をフルテキストまたは部分ごとに測定すると、依然として違いが生じます。

どうしてこれなの?

4

1 に答える 1

6

ドキュメントには答えがあります:

MeasureString メソッドは、個々の文字列で使用するように設計されており、文字列の前後に少量の余分なスペースが含まれており、グリフがはみ出すことができます。また、DrawString メソッドはグリフ ポイントを調整して表示品質を最適化し、MeasureString によって報告されるよりも狭い文字列を表示する場合があります。レイアウト内の隣接する文字列に適したメトリックを取得するには (たとえば、書式設定されたテキストを実装する場合)、MeasureCharacterRanges メソッドを使用するか、StringFormat を受け取る MeasureString メソッドの 1 つを使用して、GenericTypographic を渡します。また、Graphics の TextRenderingHint が AntiAlias であることを確認します。

強調された部分は、ここで関連するものです。

コードを修正するには、必要なパラメーターを追加します。

intWidth = (int)objGraphics.MeasureString(sImageText1, objFont, 1024, Stringformat.GenericTypographic).Width
           + (int)objGraphics.MeasureString(sImageText2, objFont, 1024, StringFormat.GenericTypographic).Width;
于 2012-11-01T08:23:16.730 に答える