【问题标题】:Measure actual height of string测量字符串的实际高度
【发布时间】:2018-09-16 20:47:58
【问题描述】:

如何找到要渲染的字符串的实际高度(和宽度)?我需要能够绘制 x 毫米高的文本。

如果我能得到实际的文本高度,应该很容易计算出所需的字体大小。

例如。从字体大小开始,测量渲染文本并计算新字体大小(new_font_size = old_font_size * Wanted_height / measure_height)

我尝试过使用Graphics.MeasureString,但其中包含一些对于大尺寸可能会变得相当大的填充。

【问题讨论】:

  • Graphics.MeasureStringTextRenderer.MeasureText 是我熟悉的方法。它们都测量文本的实际大小并添加一些边距。也许MeasureText 会给你一个更准确的结果。
  • 我需要没有边距的尺寸。
  • “边距”实际上并不是页边距,它们是字体显示变音符号和降行符所需的空间。试试你自己的姓氏:)
  • 除非文本包含任何变音符号或降序,否则不应包含在大小中。如果我有文本“ABC”并希望它为 10 毫米,我不希望计算出的大小为变音符号或下降字符腾出空间。

标签: c# .net gdi+


【解决方案1】:

似乎可以将文本添加到 GraphicsPath 并从中获取大小:

public static SizeF GetSize(String text, Font font, StringFormat format)
{
    GraphicsPath path = new GraphicsPath();
    path.AddString(text, font.FontFamily, (int)font.Style, font.SizeInPoints, new PointF(0, 0), format);
    return path.GetBounds().Size;
}

【讨论】:

  • 实际上要获得正确的结果,您需要使用 em-size 将字符串添加到路径中,而不是以点为单位的大小! (要将其转换为 g.DpiY / 72f ..您以 mm 为单位控制大小需要更多的数学运算..另外:处理 graphicsPath!
  • 该函数给出了一个有用的尺寸,至少在使用毫米作为单位时,尺寸在使用时是正确的,如:Font font = new Font(drawFont.Name, (float)(drawFont.SizeInPoints), drawFont .Style,drawFont.Unit); gc.DrawString(text, font, Brushes.Black, xpos, ypos, format);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 2019-01-14
相关资源
最近更新 更多