私がやっていることは、文字列のピクセル サイズを取得し、それを 100 分の 1 インチに変換することです (つまり、ピクセル/DPI = インチ、インチ * 100 = 100 分の 1 インチ)。これが私のコードです:
private static SizeF TextSize(string text, Font txtFnt)
{
SizeF txtSize = new SizeF();
// The size returned is 'Size(int width, int height)' where width and height
// are the dimensions of the string in pixels
Size s = System.Windows.Forms.TextRenderer.MeasureText(text, txtFnt);
// Value based on normal DPI settings of 96
txtSize.Width = (float)Math.Ceiling((float)s.Width / 96f * 100f);
txtSize.Height = (float)Math.Ceiling((float)s.Height / 96f * 100f);
return txtSize;
}
現在、Arial フォントを使用すると、12 未満のフォントでは問題なく動作しますが、計算されたサイズが実際のサイズよりも小さいため、文字が途切れ始めます。DPI 設定が 96 に設定されていることはわかっています。私のフォントはすべて同じように定義されており、フォント サイズのバリエーションは次のとおりです。
Font myFont = new Font("Arial", <font size>, FontStyle.Regular, GraphicsUnit.Point);
GraphicsUnit.Point
文字列を描画しているカスタムコントロールのために使用する必要があると思いますが、GraphicsUnit
問題はありますか?
機能はMeasureText
正しく動作していますか、それとも何か他のことが起こっていますか?
編集
カスタム印刷プレビュー コントロールに描画しています。印刷プレビュー コントロールの単位は「インチ/100」です (したがって変換)。テキスト、画像などは Printer グラフィックス オブジェクトで描画されていると思いますが、完全にはわかりません。