"font1"が正規のものであるにもかかわらず、 "result1"と "result2"変数の値(文字列の測定幅)は同じです。 「font2」は太字である。興味深いことに、このエラーは "Times New Roman"と "Arial"というフォントで表示されます。たとえば、フォント "Calibri"の戻り値が正しい場合、変数 "result2"の値は変数 "result1"の値よりも大きくなります。なぜこうなった?MeasureStringでArialとTimes New Romanのフォントスタイルが無視されます
using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromHwnd(IntPtr.Zero))
{
graphics.PageUnit = System.Drawing.GraphicsUnit.Pixel;
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
System.Drawing.Font font1 = new System.Drawing.Font("Arial", 10.0f, System.Drawing.FontStyle.Regular);
System.Drawing.Font font2 = new System.Drawing.Font("Arial", 10.0f, System.Drawing.FontStyle.Bold);
float result1 = graphics.MeasureString("WWW", font1, int.MaxValue, System.Drawing.StringFormat.GenericTypographic).Width;
float result2 = graphics.MeasureString("WWW", font2, int.MaxValue, System.Drawing.StringFormat.GenericTypographic).Width;
}
あなたは実際に同じ幅を持っていないと確信していますか? ArialとArial Boldを含むMicrosoft Wordで「WWW」と入力すると、同じ幅を持つように見えます。 – Jacob
私は 'MeasureString'に問題がありました。代わりに 'TextRenderer'を使って文字列の幅を測定します。同様に 'Size textSize = TextRenderer.MeasureText("こんにちは! "、新しいフォント(" Arial "、12.0F);)'。 –