【问题标题】:How to get height of font in Freetype2如何在 Freetype2 中获取字体高度
【发布时间】:2022-03-24 06:43:02
【问题描述】:

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

但对于某些字体,它会给出错误的数据。任何人都可以帮助找到正确的公式来找到给定点的正确字体高度吗? (不适用于单个字形)。

【问题讨论】:

    标签: freetype freetype2


    【解决方案1】:

    cocos2d-x中使用的方法如下:

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

    大多数字体都可以。对于不正常的情况,我在获取 GlyphBitmap 的高度后校准值,然后使用较大的作为最大行高。

    【讨论】:

      【解决方案2】:

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

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

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-01
        • 2017-01-20
        • 1970-01-01
        • 2013-06-14
        • 2012-05-02
        • 2010-09-18
        • 1970-01-01
        • 2017-03-15
        相关资源
        最近更新 更多