我需要找到确切的尺寸在任意字体的每个字符。
的字体是使用加载GlyphTypeface类。
的问题是,我可以访问使用AdvanceWidths属性的字形的仅直接宽度,但高度是每个字符相同,并且它被设置为身高属性。
看来,个性高度可以使用基线的组合,身高,X字高,BottomSideBearings和TopSideBearings特性来计算,但没有关于所有这些值的真正意义的文件。 基线,高度和X字高值是针对整个字体不变,对于另外两个 - 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 - 找到它需要由字体大小相乘真实大小。
也许你可以得到的界限被返回的几何GlyphTypeface.GetGlyphOutline方法:
GlyphTypeface typeface = new GlyphTypeface(new Uri(@"C:\Windows\Fonts\SegoeUI.ttf"));
ushort glyphIndex = typeface.CharacterToGlyphMap['W'];
double emSize = 14d;
Geometry outline = typeface.GetGlyphOutline(glyphIndex, emSize, 0d);
Size size = outline.Bounds.Size;