在FreeType 2中获取文本边界框的正确方法是什么?

时间:2014-10-21 12:22:56

标签: c freetype

我想知道使用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

1 个答案:

答案 0 :(得分:5)

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

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

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