Freetypeから指定されたグリフを取得します(Shift JISエンコード)?
質問
これまで、フォントレンダリングにテクスチャ(BitMapFont)を使用していましたが、Freetype2を動作させようとしています。私の文字列はすべてshift_jisエンコードされており、私の唯一の問題は、Freetypeから適切なグリフを適切なShift_jisビットセクセンスに到達させることです。しかし、それは私が思っていたよりも難しいようです。たとえば、「亜」には、charcode "0x889f"があります(バイト1は136に設定され、バイト2は159です) - これはShift_jisエンコードによるものです。だから私は関数を呼びました:
FT_Select_Charmap(face, FT_ENCODING_SJIS);
次に、そのcharcodeでグリフをロードしてみてください。
FT_Load_Char(face, 0x889F, FT_LOAD_RENDER );
しかし、私はいくつかのランダムなグリフを受け取ります。私はすでに同じ結果を持つ異なるフォントを試したので、それはフォント固有の問題になることはできません(そして、それらはシフトJISのCharmapを提供します)。たとえば、「0」(ゼロ)は位置0x0030にある必要がありますが、実際には0x002dです。すべての文字の一定のオフセットが3のわけではありません。そうでなければ問題はありません...私の「FT_LOAD_CHAR」コールは、CharCodeパラメーターを間違った方法で渡すと思いますが、それが正しいことを推測できません。すでに試した:
FT_Load_Char(face, FT_Get_Char_Index(face, 0x889F), FT_LOAD_RENDER );
しかし、その後、私は別のランダムグリフを受け取ります。では、デフォルトのCharmapが選択されていない場合、CharCodeをFT_LOAD_CHARに渡すにはどうすればよいですか?
どんなアドバイスでも本当に役立ちます。ありがとうございました。
解決
誰もが後でこれを似たような問題で見つけたら:私はその場で文字コードをUnicode(ICU4Cを使用して)に変換することになりました。多くの日本のSJISフォントヘッダーには問題があるようです(Freetype Enumsで選択できません - これらのフォントのいずれかの利用可能なすべての充電器をリストしてから、手動で適切に選択する場合のみ - プラットフォームIDおよびエンコードID anireこれらのすべてのフォントと同じ)。しかし、それは私の必要性に対する適切な解決策ではありませんでした(異なるフォントを使用するため)ので、ついにICU4Cを使用することにしました。
うまくいけば、これが誰かに役立つでしょう。