1

これまで、フォントのレンダリングにテクスチャ(bitmapfont)を使用していましたが、freetype2を機能させようとしています。私の文字列はすべてSHIFT_JISでエンコードされており、私の唯一の問題は、フリータイプから適切なSHIFT_JISビットシーケンスに正しいグリフを取得することです。でも思ったより難しいようです。たとえば、「亜」の文字コードは「0x889F」です(バイト1は136に設定され、バイト2は159に設定されています)。これは、SHIFT_JISエンコーディングに準拠しています。だから私は関数を呼び出しました:

FT_Select_Charmap(face, FT_ENCODING_SJIS);

次に、その文字コードを使用してグリフをロードしてみます。

FT_Load_Char(face, 0x889F, FT_LOAD_RENDER ); 

しかし、ランダムなグリフを受け取ります。同じ結果ですでに異なるフォントを試したので、フォント固有の問題になることはありません(そして、そうです、それらはshift-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に渡すことができますか?

どんなアドバイスも本当に役に立ちます。ありがとうございました。

4

1 に答える 1

0

誰かが後で同様の問題でこれを見つける場合:私は文字コードをその場でユニコードに変換することになりました(icu4cを使用して)。多くの日本語SJISフォントヘッダーに問題があるようです(フリータイプ列挙型では選択できません-これらのフォントのいずれかで使用可能なすべての文字セットをリストし、適切なフォントを手動で選択した場合のみ-プラットフォームIDとエンコーディングIDはありませんこれらすべてのフォントで同じではありません)。しかし、それは私のニーズに適切な解決策ではなかったので(異なるフォントを使用しているため)、私はついにIcu4cを使用することにしました。

うまくいけば、これは誰かに役立つでしょう。

于 2010-12-17T00:35:36.120 に答える