如何找到确切大小在WPF任意字形?(How to find exact size for an ar

2019-09-21 06:10发布

我需要找到确切的尺寸在任意字体的每个字符。

的字体是使用加载GlyphTypeface类。

的问题是,我可以访问使用AdvanceWidths属性的字形的仅直接宽度,但高度是每个字符相同,并且它被设置为身高属性。

看来,个性高度可以使用基线的组合,身高,X字高,BottomSideBearings和TopSideBearings特性来计算,但没有关于所有这些值的真正意义的文件。 基线,高度和X字高值是针对整个字体不变,对于另外两个 - BottomSideBearings和TopSideBearings - 我无法找到它们的含义。

一般来说,有如何可以从任意字体来计算个人字形的大小的信息吗? (刚走了“TTF”文件,或其他任何GlyphTypeface可以被加载)。

Answer 1:

经过一番研究,发现计算字符大小的正确方法:

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 - 找到它需要由字体大小相乘真实大小。



Answer 2:

也许你可以得到的界限被返回的几何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;


文章来源: How to find exact size for an arbitrary glyph in WPF?