完成以下代碼後,「result1」和「result2」變量(測量的字符串寬度)的值是相同的,儘管「font1」 「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;
}
你確定它們實際上沒有相同的寬度嗎?在Microsoft Word中使用Arial和Arial Bold鍵入「WWW」時,它們看起來具有相同的寬度。 – Jacob
我遇到過'MeasureString'問題。相反,我使用'TextRenderer'來測量字符串的寬度。像這樣'Size textSize = TextRenderer.MeasureText(「Hi there!」,new Font(「Arial」,12.0F);)'。 –