C#-TextRenderer.MeasureText太宽了几个像素

本文关键字:几个 像素 MeasureText C#-TextRenderer | 更新日期: 2023-09-27 18:26:24

我使用TextRender.MeasureText而不是Graphics.MeasureString,因为它允许我指定TextFormatFlags.NoPadding,但它的返回宽度是几个像素到宽。对于一个四个字符的文本字符串,它的五个像素在上面,对于一个五个字符的文字串,它的六个像素在下面。我相信,如果文本字符串更长,它会更大。我正在使用.Net 4.5.1。这是我的代码:

Size size = TextRenderer.MeasureText(items[a], new Font("Segoe UI", 12, GraphicsUnit.Pixel), new Size(Width, 15), TextFormatFlags.NoPadding);

如何获得准确的(+/-1/2px可以)文本宽度?感谢:D

C#-TextRenderer.MeasureText太宽了几个像素

与人们普遍认为的Graphics.MeasureString是在不占用额外空间的情况下测量短字符串的更好选择相反。

您需要使用StringFormat GenericTypographic:

SizeF stringSize = new SizeF();
stringSize = e.Graphics.MeasureString(items[a], 
                                      new Font("Segoe UI", 12, GraphicsUnit.Pixel), 
                                      new SizeF(Width, 15f), 
                                      StringFormat.GenericTypographic);

这是MSDN的一句话:

MeasureString方法设计用于单个字符串并且包括字符串前后的少量额外空间以允许悬垂的字形。此外,DrawString方法会进行调整字形指向优化显示质量并可能显示字符串比MeasureString报告的要窄。获得合适的指标对于布局中的相邻字符串(例如,在实现格式化文本),使用MeasureCharacterRanges方法或MeasureString方法采用StringFormat,并传递通用排版。此外,请确保Graphics是AntiAlias。

如果你打算增加尺寸,我也建议你使用SizeF。