【发布时间】:2016-03-15 00:12:24
【问题描述】:
背景:我正在尝试使用 Cambria Math 字体呈现一些文本。为了正确定位和缩放它,我需要测量文本。但是,无论要呈现的实际文本如何,Graphics.MeasureString 和 Graphics.MeasureCharacterRanges 似乎都会返回 FontMetrics 中为字体定义的文本的行高。例如,如果我测量一个简单的单个字符,例如“x”,据报道它的高度几乎是宽度的 8 倍。
这种特殊字体的上升、下降和行高非常很大,大概是因为它包含一些非常高的不寻常符号。 (此字体的 FontMetrics.GetLineHeight 为 11428,而我测试的随机典型字体为 2318。两者的 GetEmHeight = 2048)。
这样的效果可以在Win7中的Character map应用程序中看到:如果你选择Cambria Math字体,然后选择一个字符,它在选择框中显示为一个大点——大概它已经被缩放到了15%左右自然大小以使理论线高适合盒子。
问题:有没有办法测量特定字符串的实际高度,在这种情况下这会给我一个更有意义的高度?在实践中,我不会渲染任何异常高大的角色。
【问题讨论】:
-
不确定那个汉斯的相关性?我知道这种字体的单元格上升是巨大的——这就是问题所在——它比字体中几乎所有字符的视觉上升要大几倍。我正在寻找特定字符的度量,这些字符不使用 FontFamily 的误导性上升和下降。
-
谢谢我没有看到那个 - 我搜索的是测量问题而不是字体名称。这是同样的问题,但有些不同的问题 - 他想将字体分配给 WinForms 控件,而如果我可以测量给定的一组字符,我就可以正确渲染。我怀疑答案——“你不能”——可能是一样的。
标签: .net winforms graphics system.drawing