2 votes

FreeType FT_New_Memory_Face se bloque

J'ai chargé un fichier "arial.ttf" (pris de mon dossier /Windows/Fonts) dans la mémoire, cependant passer ceci dans FT_New_Memory_Face plante (quelque part dans FT_Open_Face). Je ne suis pas en mesure de déboguer ce problème, avez-vous des indices sur ce que je pourrais faire de mal ?

unsigned char *fontBuffer = LoadFile("arial.ttf");
zip_uint64_t fSize = GetFileSize("arial.ttf");
FT_Library  library;   /* handle to library     */
FT_Face     face; 
int error = FT_Init_FreeType( &library );
if( error != 0 )
    printf("FT_Init_FreeType failed");

error = FT_New_Memory_Face( library,
                            (FT_Byte*)fontBuffer,
                            fSize,                  
                            0,                      
                            &face );

5voto

lost_bits1110 Points 669

Il s'est avéré que le problème venait de mon côté, en particulier, la méthode LoadFile renvoyait la mémoire de la pile, plutôt que du tas. La bibliothèque fonctionne bien. Merci !

2voto

J'ai cherché la réponse pendant un jour. Le problème se trouvait dans la section des notes. https://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#FT_New_Memory_Face Vous ne devez pas désallouer la mémoire avant d'appeler FT_Done_Face. FreeType ne copie pas le tampon et utilise le pointeur que vous envoyez à FT_New_Memory_Face.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X