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 を返す) である理由を理解できないことです。
カーニング情報が "VA" と "To" のペアに存在することを FontForge で確認しました。したがって、.ttf に保存する必要があります。それにもかかわらず、上記のコードでは、「VA」または「To」のカーニングは常に 0 であるか、FT_HAS_KERNING は false を返します。
ここで不足している freetype オプションまたは設定はありますか? どんな種類の啓発も大歓迎です..
編集:顔のサイズを設定しています
FT_Set_Pixel_Sizes( face->getFace(), 0, size);