2012-07-16 9 views
6

Por lo tanto, tengo una implementación que analiza un xml que, entre otras cosas, las posiciones y las cadenas de la página principal de Wikipedia. El análisis se hace con rapidxml después de lo cual las cadenas se convierten de UTF-8 a UTF-32 por http://utfcpp.sourceforge.net/. El código UTF-32 se utiliza entonces en freetype de:Problemas Unicode en FreeType

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

donde * p es el código de caracter UTF-32. Este glifo se representa en OpenGL.

Ahora, parece que no puedo obtener caracteres cryllic para trabajar, ni chino, japonés o viet, estoy seguro de que * p corresponde al código correcto, y agradecería cualquier apuntador que pueda obtener.

Para estas fuentes se usa Microsofts arial.ttf, del Arch linux package y de lo que he visto en los programas de visualización de fuentes, debe contener los caracteres que quiero.

Respuesta

7

Dos cosas que sugieren:

En primer lugar, tienen que llamó FT_Select_Charmap para especificar que está utilizando una codificación Unicode?

FT_Select_Charmap(face , ft_encoding_unicode); 

En segundo lugar, no todas las fuentes Arial tienen todos los caracteres, y algunos espectadores de letra (en Windows, de todos modos) puede inducir a error mediante la sustitución automática de glifos diferentes caras. Pruebe ArialUni.ttf si puede encontrarlo.

+1

¡Gracias por sus sugerencias! Usar FT_Select_Charmap no produjo ningún resultado diferente, supongo que unicode es el valor predeterminado de freetype. ¿Hay alguna fuente gratuita que contenga los caracteres que estoy buscando que usted pueda recomendar? –

+1

Re. fuentes, comenzaría aquí: http://en.wikipedia.org/wiki/Unicode_typeface - y otra cosa para comprobar es el punto de interrupción antes de llamar a 'FT_Get_Char_Index' y verificar exactamente qué punto de código está pasando. Puede haber un error en el uso de rapidxml o utfcpp ... – Roddy

+1

La codificación predeterminada de Freetype depende de la fuente que esté utilizando y algunas otras cosas. Recomiendo que se especifique la codificación explícitamente. – Roddy

1

No olvide establecer el tamaño de fuente justo después de cargar la cara.

FT_Error err = FT_Set_Pixel_Sizes(face, (width), (height)); 
Cuestiones relacionadas