我需要找到任意字体中每个字符的精确大小。
使用 GlyphTypeface 加载字体类。
问题是我只能使用 AdvanceWidths 属性直接访问字形的宽度,但每个字符的高度相同,并且设置为 Height属性。
似乎可以使用 Baseline、Height、XHeight、BottomSideBearings 和 TopSideBearings 属性的组合来计算单个字符高度,但没有关于所有这些值的真正含义的文档。整个字体的基线、高度和 XHeight 值是恒定的,而其他两个 - BottomSideBearings 和 TopSideBearings - 我找不到它们的含义。
一般来说,是否有任何信息如何计算任意字体的单个字形的大小? (只有“TTF”文件,或者可以从中加载任何其他 GlyphTypeface)。
最佳答案
经过一番研究,找到了计算字符大小的正确方法:
var typeface = new GlyphTypeface(new Uri(fontpath));
var character = 'W';
var charIndex = typeface.CharacterToGlyphMap[character];
var width = typeface.AdvanceWidths[charIndex];
var height = typeface.Height - typeface.TopSideBearings[charIndex]
- typeface.BottomSideBearings[charIndex];
这将给出以 em 为单位的字符大小 - 要找到实际大小,需要将其乘以字体大小。
关于wpf - 如何在 WPF 中找到任意字形的精确大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11971547/