【问题标题】:C# - TextRenderer.MeasureText is a few pixels too wideC# - TextRenderer.MeasureText 太宽了几个像素
【发布时间】:2014-10-14 12:24:31
【问题描述】:

我使用 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

【问题讨论】:

  • 听起来是 n 个字符数 + 1。你可以走 hacky 路线并做:items[a].Length + 1
  • 我想它只是具有额外空格的文本字形。
  • +gmiley no 最多添加7个像素。
  • +Alex Anderson 如何删除多余的空格?
  • 可能您的源文本包含换行符,因此会计算一个额外的字符

标签: c# .net winforms graphics drawing


【解决方案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,并通过 通用排版。此外,确保 TextRenderingHint 的 图形是 AntiAlias。

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

【讨论】:

    猜你喜欢
    • 2014-12-28
    • 2013-05-05
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 2020-02-13
    • 2011-11-21
    相关资源
    最近更新 更多