Hi,

how did you come up with that -29? :)

regards


2013/3/30 suzuki toshiya <[email protected]>

> Hi,
>
> What kind of text[] is passed to FT_Load_Char()?
> And what kind of the error is returned?
>
> Regards,
> mpsuzuki
>
> Michael Franklin wrote:
> >
> > Hello,
> >
> > First of all, let me say thanks for FreeType.  I was thrilled when text
> first appeared (clean and crisp) on my embedded system for the fist time
> even if it wasn't the text I hoped for.  And I'm hoping you can help me
> with that.
> >
> > I'm creating an embedded system using a Cortex-M4 processor and the
> Sourcery Codebench Lite (GCC 4.7.2) toolchain.
> >
> > I'm trying to do a simple glyph to bitmap rendering as demonstrated in
> the FreeType Tutorial 1.  I have successfully displayed glyphs from
> Verdana.ttf (stolen from my Windows 8 computer) and FreeMono.ttf (stolen
> from my Mint Linux computer).  However, with both of these fonts, I can't
> get the correct glyphs unless I subtract 29 from the character code as
> shown below.
> >
> > error = FT_Load_Char(face, text[i] - 29, FT_LOAD_RENDER);   //this works
> > error = FT_Load_Char(face, text[i], FT_LOAD_RENDER);   //this doesn't
> work
> >
> > Verdana.ttf reports 1 charmap (platform: 0, encoding: 1) and Mono.ttf
> reports 0 charmaps, which also seems strange.
> >
> > I also tried a few other fonts (Arial.ttf from my Windows 8 computer and
> a few others), but they all return various errors after calling
> FT_Load_Char.  Sometimes FT_Err_Invalid_Opcode and sometimes
> FT_Err_ENDF_In_Exec_Stream depending on the file.
> >
> > At first I suspected my disk I/O routines, but these have all been
> working well in my libpng port, so I'm fairly confident they are working
> well.  Also,  FT_New_Face doesn't give me any errors.
> >
> > Here's my source code.  Please let me know if you have any suggestions.
> >
> > Thanks.
> >
> > DrawText(const Point& p, const uint8_t size, const File& file, const
> Color& color, const char* text, ...)
> > {
> >     FT_Library library;
> >
> >     FT_Error error = FT_Init_FreeType(&library);
> >     if (error)
> >     {
> >         printf("FT_Init_FreeType failed\r]n");
> >         return;
> >     }
> >
> >     printf("FT_Init_FreeType finished\r\n");
> >
> >     FT_Face face;
> >     error = FT_New_Face( library, "/arialbi.ttf", 0, &face );
> >     if ( error == FT_Err_Unknown_File_Format )
> >     {
> >         printf("FT_New_Face failed\r\n");
> >         //... the font file could be opened and read, but it appears
> >         //... that its font format is unsupported
> >     }
> >     else if ( error )
> >     {
> >         printf("FT_New_Face failed 2: %d\r\n", error);
> >         //... another error code means that the font file could not
> >         //... be opened or read, or simply that it is broken...
> >     }
> >     else
> >     {
> >         printf("FT_New_Face finished\r\n");
> >
> >         printf("%d charmaps exist\r\n", face->num_charmaps);
> >         for (int n = 0; n < face->num_charmaps; n++ )
> >         {
> >             FT_CharMap charmap = face->charmaps[n];
> >             printf("charmap: %d, %d\r\n", charmap->platform_id,
> charmap->encoding_id);
> >         }
> >
> >         error = FT_Set_Char_Size(
> >             face,      // handle to face object
> >             0,         // char_width in 1/64th of points
> >             size << 6, // char_height in 1/64th of points
> >             72,        // horizontal device resolution in dots per inch
> >             72);       // vertical device resolution
> >
> >         if (error)
> >         {
> >             printf("FT_Set_Char_Size failed\r\n");
> >         }
> >         else
> >         {
> >             printf("FT_Set_Char_Size finished\r\n");
> >
> >             int i = 0;
> >             int16_t x = 200;
> >             int16_t y = 200;
> >             while (text[i] != '\0')
> >             {
> >                 error = FT_Load_Char(face, text[i] - 29, FT_LOAD_RENDER);
> >                 if (error)
> >                 {
> >                     printf("Missing Glyph for char %c: %d\r\n", text[i],
> error);
> >                 }
> >                 else
> >                 {
> >                     printf("FT_Load_Char[%c] succeeded\r\n", text[i]);
> >                     FT_Draw_Bitmap(&face->glyph->bitmap,
> face->glyph->bitmap_left + x, y - face->glyph->bitmap_top);
> >
> >                     //Move cursor to position for next character
> >                     x += (face->glyph->advance.x >> 6);  //int 1/64th
> units, so shift by 6
> >                     y += (face->glyph->advance.y >> 6);
> >
> >                     printf("%d,%d\r\n", x, y);
> >                 }
> >
> >                 i++;
> >             }
> >         }
> >
> >         error = FT_Done_Face(face);
> >         if (error)
> >         {
> >             printf("FT_Done_Face failed\r\n");
> >         }
> >     }
> >
> >     error = FT_Done_FreeType(library);
> >     if (error)
> >     {
> >         printf("FT_Done_FreeType failed\r\n");
> >     }
> > }
> >
> > void FT_Draw_Bitmap( FT_Bitmap*  bitmap, FT_Int x, FT_Int y)
> > {
> >     FT_Int  i, j, p, q;
> >     FT_Int  x_max = x + bitmap->width;
> >     FT_Int  y_max = y + bitmap->rows;
> >
> >     for ( i = x, p = 0; i < x_max; i++, p++ )
> >     {
> >         for ( j = y, q = 0; j < y_max; j++, q++ )
> >         {
> >             uint8_t alpha = bitmap->buffer[q * bitmap->width + p];
> >             SetPixel({i, j}, Color(alpha, alpha, alpha));
> >         }
> >     }
> > }
> >
> > _______________________________________________
> > Freetype mailing list
> > [email protected]
> > https://lists.nongnu.org/mailman/listinfo/freetype
>
>
> _______________________________________________
> Freetype mailing list
> [email protected]
> https://lists.nongnu.org/mailman/listinfo/freetype
>
_______________________________________________
Freetype mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/freetype

Reply via email to