【问题标题】:What's the proper way of getting text bounding box in FreeType 2?在 FreeType 2 中获取文本边界框的正确方法是什么?
【发布时间】:2014-10-21 12:22:55
【问题描述】:

我想知道使用 FreeType 2 获取文本边界框的最佳方法是什么?

为了得到行空间边界框的宽度,我遍历了文本的所有字符并得到它的前进和紧缩:

FT_Face face = ...;
text_bbox_width = 0;
while (*p_text)
{
  ...
  FT_Get_Kerning(...);
  text_bbox_width += (face->glyph->advance.x + kerning.x) >> 6;
}

如何获取行空间边界框高度?是否需要迭代或可以使用字体数据获得?即:

text_bbox_height = (face->ascender - face->descender) >> 6

【问题讨论】:

  • 您希望字符串...---___Hfj 的边界框高度相同吗?请注意,Freetype 不关心 line 间距;这可以小于、等于或大于绘制字符的“必要”空间。
  • @Jongware 是的,行高。

标签: c freetype


【解决方案1】:

好消息:您不需要遍历每个字符串中的字符。您可以使用face->size->metrics->height,如3 中所述。 http://www.freetype.org/freetype2/docs/tutorial/step2.html 的全局字形指标。注意使用ascenderdescender 的警告。

不要将此高度误认为是实际像素边界框。个别字形可能会伸出此框。您可以使用此行高在同一文本块中的多行上获得均匀的间距。要获得“更大”或“更小”的间距,您可以将此值乘以一个常数,例如 1.5 或 2.0 表示“双行间距”。

我猜测 Freetype 计算的height 的值是某种字体的“正常”或“最佳”行距。

【讨论】:

    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 2011-03-17
    • 2013-03-07
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多