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

时间:2014-10-14 12:24:32

标签: c# .net winforms graphics drawing

我正在使用TextRendere.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

1 个答案:

答案 0 :(得分:1)

与流行的相信相反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并传递   GenericTypographic。另外,请确保TextRenderingHint   图形是AntiAlias。

如果您打算添加尺寸,我还建议使用SizeF。