2012-07-16 12 views
6

私は、とりわけWikipediaのメインページの位置と文字列を解析する実装を持っています。解析はrapidxmlで行われ、その後、文字列はhttp://utfcpp.sourceforge.net/によってUTF-8からUTF-32に変換されます。FreeTypeでのUnicodeの問題

unsigned long c = FT_Get_Char_Index(face,*p); 
FT_Load_Glyph(face,c,FT_LOAD_RENDER); 

ここで、* pはUTF-32 charコードです。このコードは、フリータイプのコードで使用されます。このグリフはOpenGLでレンダリングされます。

今、私はクリトリック文字や中国語、日本語、またはビエトを使うことができません。* pが正しいコードに対応していると確信しています。

Arch linux packageからMicrosofts arial.ttfが使用され、fontviewingプログラムで見たことから、必要な文字が含まれているはずです。提案する

答えて

7

2つのこと:

まず、あなたがUnicodeエンコーディングを使用している指定するFT_Select_Charmapを求めていますか?

FT_Select_Charmap(face , ft_encoding_unicode); 

第二に、すべてのArialていないフォントは自動的に異なる顔からグリフを代入することによって誤解することができます(Windowsの場合、とにかく)すべての文字、およびいくつかのフォントビューアを持っています。見つけたらArialUni.ttfを試してください。

+1

ありがとうございました! FT_Select_Charmapを使用しても異なる結果は得られませんでしたが、私はそのユニコードがfreetypeのデフォルトであると推測していますか? あなたがお勧めしたい文字を含むフリーフォントはありますか? –

+1

Re。フォントは、私はここから始めたいと思います:http://en.wikipedia.org/wiki/Unicode_typeface - もう1つの点は、 'FT_Get_Char_Index'を呼び出す前にブレークポイントを指定し、渡すコードポイントを正確に調べることです。バグがrapidxmlやutfcppの使用にある可能性があります。 – Roddy

+1

Freetypeのデフォルトのエンコーディングは、使用しているフォントやその他のいくつかの項目によって異なります。エンコードを明示的に指定することをおすすめします。 – Roddy

1

顔を読み込んだ直後にフォントサイズを設定することを忘れないでください。

FT_Error err = FT_Set_Pixel_Sizes(face, (width), (height)); 
関連する問題