我正在尝试使用 freetype 2.6 库从一些 .ttf 字体中提取字距调整信息。
这就是我获取字距调整信息的方式(循环字符):
if( FT_HAS_KERNING(face->getFace()) && previous ){
FT_Vector delta;
FT_UInt glyph_index = FT_Get_Char_Index( face->getFace(), character );
FT_UInt prev_index = FT_Get_Char_Index( face->getFace(), previous );
FT_Get_Kerning( face->getFace(), prev_index, glyph_index,
FT_KERNING_DEFAULT, &delta );
kerning = delta.x >> 6;
}
我尝试了一些不同字体的程序:“Times new roman.ttf”、“Tymes.ttf”、“minion.otf”。仅对于 Times new Roman 字体,字距调整信息已正确提取,我通过记录信息进行了检查。
问题是我不明白为什么其他 2 种字体的字距始终为 0(即 FT_HAS_KERNING 返回 false,并且 FT_GetKerning 无论如何都返回 0)。
我用 fontforge 检查了“VA”和“To”对的字距调整信息,它们就在那里!所以它们必须存储在 .ttf 中。然而,对于上面的代码,“VA”或“To”的字距始终为 0,否则 FT_HAS_KERNING 返回 false。
我在这里缺少任何自由类型选项或设置吗?任何形式的启蒙都值得赞赏..
编辑:我正在设置面部大小
FT_Set_Pixel_Sizes( face->getFace(), 0, size);