†Graphics.DrawStringメソッドやTextRenderer.DrawTextメソッドを使って文字列を描画した時の大きさを計測するには、Graphics.MeasureStringメソッドやGraphics.MeasureCharacterRangesメソッド、あるいはTextRenderer.MeasureTextメソッドを使用します。これらのメソッドはどれも上下左右に余白を入れますので、通常は実際に描画される大きさよりも大きく計測されます。Graphics.MeasureStringメソッドを呼び出す時にStringFormat.GenericTypographicを渡す、Graphics.MeasureCharacterRangesメソッドを使用する、TextRenderer.MeasureTextメソッドを呼び出す時にTextFormatFlags.NoPaddingを指定するといった方法で左右の余白をほぼなくすことができます。それでも正確な大きさは計測できません。実際に描画される大きさを正確に計測するには、やはり実際に描画してみるしかないようです。difference」にあります。これを参考にさせていただいて、私も以下のようなコードを書いてみました。このメソッドは、Graphics.DrawStringメソッドで文字列を描画した時に描画される範囲(大きさと位置)を計測しています。name="proposedSize">これ以上大きいことはないというサイズ。できるだけ小さくすること。<returns>文字列が描画される範囲。見つからなかった時は、Rectangle.Empty。name="proposedSize">これ以上大きいことはないというサイズ。できるだけ小さくすること。<returns>文字列が描画される範囲。見つからなかった時は、Rectangle.Empty。上記MeasureStringPreciselyメソッドを使用した例を示します。この例では、まずMeasureStringメソッドで文字列の大きさを計測して、赤い四角で描画しています。次に上記MeasureStringPreciselyメソッドで文字列が描画される範囲を計測して、青い四角で描画します。最後に文字列を黒で描画します。この例では、「PictureBox1」というPictureBoxコントロールが存在しているものとして、そこに描画した結果を表示しています。canvas;上記コードを実行した結果は、例えば以下の画像のようになります。†MeasureStringPreciselyメソッドで何をしているのか、簡単に説明します。十分な大きさのBitmapオブジェクトを作成します。ここに文字列を描画して、大きさを計測しようという訳です。Bitmapオブジェクトを作成する時に、文字列の描画先であるGraphicsオブジェクトをコンストラクタの引数に渡しています。このようにすると、Bitmapの解像度がGraphicsの解像度と同じになります。Graphicsを指定せずにコンストラクタを呼び出した場合は、後でBitmap.SetResolutionメソッドを使って解像度を設定することもできます。次に、BitmapのGraphicsを作成しています。Bitmapに文字列を描画する時にその大きさに影響を及ぼすと思われるプロパティの値を描画先のGraphicsのと同じにしておきます。ここでは、TextRenderingHint、TextContrast、PixelOffsetModeプロパティのみを同じにしています。Frameworkのバージョンアップでそのようなプロパティが新たに出てくるかもしれません。準備が整ったところで、Bitmapに文字列を実際に描画します。その前に、Bitmapの背景色を取得しておきます。この背景色は、どこに文字列が描画されているかを判断するのに使用します。ここでいよいよ計測ですが、これは別のメソッド(MeasureForegroundAreaメソッド)で行っています。ここで行っていることは実に単純で、Bitmapの色を1ピクセルずつGetPixelメソッドで取得して、それが背景色と同じか調べているだけです。背景色と違ったら、文字列が描画されていると判断します。この方法で左右上下の余白部分を計測して、文字列が描画されている範囲を決定します。ちなみに色を比較する時は、Color.ToArgbメソッドでARGB値に変換した値を比較します。これは、単純にColor同士を比較すると、名前付きか、名前付きでないかなどのARGB値以外の要因で等しくないと判断されてしまう可能性があるためです。†MeasureStringPreciselyメソッドのproposedSizeパラメータには、文字列の大きさがこれ以上大きいことはないというサイズを指定するようになっています。上記の説明のように、この大きさでBitmapオブジェクトを作成し、さらにGetPixelメソッドでしらみつぶしに調べますので、あまりに大きな値を指定してしまうと大変なことになります。それではどの位の大きさが適当なのかについては、Graphics.MeasureStringメソッドの結果を参考にするのが良いのではないかと思います。MeasureStringメソッドを呼び出す時にStringFormat.GenericTypographicを指定するのでなければ、十分な余白が取られますので、実際に描画される大きさより小さくなることはまずないでしょう。その可能性も考慮して、さらに余白を追加してもよいかもしれません。万全を期すならば、さらにMeasureStringPreciselyメソッドが返した結果を確認して、その大きさがproposedSizeと同じだったらproposedSizeをもう少し大きくしてもう一度MeasureStringPreciselyメソッドで計測するといったことも必要になるでしょう。上記のメソッドはまだテストが十分とは言えませんので、不完全かもしれません。お気づきの点がございましたら、ご連絡ください。