GraphicsPath.AddString と Graphics.DrawString で文字サイズが違うのを解決する


通常の環境で GraphicsPath.AddStringGraphics.DrawString で同じサイズを与えて描画した文字列を比べると,前者の方が小さく表示されます。これはフォントサイズの単位が両者で異なることに起因します。

Font.Size プロパティでは普通ポイント単位での大きさなので, DPI を取得してピクセル単位に変換してやれば OK です。

float sizeInPixels = font.SizeInPoints * g.DpiY / 72;  // 1 inch = 72 points
path.AddString(s, font.FontFamily, (int)font.Style, sizeInPixels, PointF.Empty, null);