如何在 Freetype2 中获取字体高度

How to get height of font in Freetype2

在 Freetype2 中,我们使用以下公式计算给定大小的字体高度。 height = (int)((point_size / face->units_per_EM) * (face->ascender - face->descender)); 其中 point_size 是用户提供的数据。

但对于某些字体,它给出了错误的数据。谁能帮助找到正确的公式来找到给定点的正确字体高度? (不适用于单个字形)。

下面是cocos2d-x中使用的方法:

_lineHeight = static_cast((face->size->metrics.ascender - face->size->metrics.descender) >> 6);

大部分字体都可以。对于不ok的情况,我在获取到GlyphBitmap的高度后进行校准,然后将较大的作为最大行高。

使用较大的作为最大行高是解决这个问题的最好方法。 因为如果你分别写不同的字符串,你可能会得到一个错误的对齐方式。

所以我找到的最佳解决方案如下:

int bbox_ymax = FT_MulFix(face->bbox.yMax, face->size->metrics.y_scale) >> 6;
int bbox_ymin = FT_MulFix(face->bbox.yMin, face->size->metrics.y_scale) >> 6;
int height = bbox_ymax - bbox_ymin;

对于某些字体,如果 vertAdvance < bbox_ymax

,您将需要使用 face->glyph->metrics.vertAdvance 而不是 bbox_ymax