DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#: DrawStringとAddStringでの文字描画サイズの違い

環境/言語:[Windows XP+Multi Lingual Package, VS.NET 2002, .NET Framework1.0]
分類:[.NET]

初めて投稿させていただきます、.NET初心者のRioと申します。

テキスト情報を元に文字のアウトライン描画を行って画像ファイルとして保存したいと
考えています。その際、テキスト上の特定の文字にルビを描画したいため、描画された
文字の位置情報も必要となります。

文字のアウトライン描画方法や描画する文字の位置情報取得の方法はこのサイトの
サンプルでわかったのですが、ひとつ困っているのが、GraphicsPathのAddString
メソッドで描画した文字のサイズと、GraphicsのDrawStringメソッドで描画した
文字のサイズが異なっていることです。

使用環境は
  Windowx XP + Multi Lingual Package
  .Net Framework1.0
  Visual Studio .NET 2002

例えば、下記のようなコードの場合、DrawStringで描画された文字のサイズは
AddStringでのそれよりも大きいサイズとなりました。


private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
  System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
  StringFormat sf = new StringFormat();
  Pen p = new Pen(Color.Black, 1);

  // DrawStringによる文字描画
  e.Graphics.DrawString("Test String", fontDialog1.Font, Brushes.Black, new Point(50, 50), sf);
  // AddStringによる文字描画
  gp.AddString("Test String", fontDialog1.Font.FontFamily, (int)fontDialog1.Font.Style, fontDialog1.Font.Size, new Point(50, 100), sf);
  e.Graphics.DrawPath(p, gp);

  gp.Dispose();
  p.Dispose();
}

少し調べてみた限りでは、DrawStringでの描画サイズは、fontDialog1.Font.Size
のサイズではなく、fontDialog1.Font.Heightのサイズと一致しているように見えます。

試しにDrawStringでの文字描画と同じ位置に、AddStringで描画サイズをfontDialog1.Font.Height
として描画してみるとぴったり重なりました。

意味的には文字の描画サイズはFont.Sizeであるべきで、DrawStringでの描画のように
Font.Heightのサイズであるのはおかしいように思えるのですが、これはこんなもの
として受け入れ、文字の位置情報取得のためにはフォントのサイズがFont.Sizeである
として処理し、実際の描画をAddStringメソッドで行う場合はサイズがFont.Height
であるとして処理をするしかないのでしょうか。

文字サイズに関して何かご存知でしたら、アドバイスをよろしくお願いいたします。
Rioさん、こんにちは
> として処理し、実際の描画をAddStringメソッドで行う場合はサイズがFont.Height
> であるとして処理をするしかないのでしょうか。
AddStringのヘルプを見ると4番目の引数は以下の説明になっているので
よいのではないでしょうか?
ただ、完全にDrawStringとサイズ一致するかは、わからないですが^^;
−−−−−−−−−−−−−−−−−−−−−−−
emSize
文字の境界を決める Em 正方形ボックスの高さ。

DOBON.NET | プログラミング道 | プログラミング掲示板