freetype
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Re: [ft] Monochrome Bitmap Trouble


From: Turner, David
Subject: RE: Re: [ft] Monochrome Bitmap Trouble
Date: Fri, 16 Sep 2005 15:55:26 +0200

Hello,

> I cannot send you the real program. But this is based on the 
> tutorial step-1.
> The addition is only that...image buffer is copied to print buffer.
> 

I have some small comments regarding your source code, though no
real solution to provide.

 a/ never call free(NULL), since the behaviour of such call is
    undefined. On some platforms this will either crash your
    program, or silently trash your heap structures.

    in all cases, free(NULL) has strictly no usefulness.

 b/ the 'pitch' field of a FT_Bitmap structure can be negative,
    so your code should deal with it:

          pitch = slot->bitmap.pitch;
          if ( pitch < 0 ) pitch = -pitch;

 c/ you don't need to call memset and memcpy in a loop, 
    a simple:

       memcpy( bitmap, bitmap.buffer, pitch*slot->bitmap.rows )

    will do exactly the same thing, since you're copying all
    bytes from the original.


Apart from that, you should really tell us which font you're using,
and what kind of results you're having ?? Some screenshots or dumps
of distorted characters might help.

Have you tried disabling hinting to see if this changes anything ?

Regards,

- David Turner
- The FreeType Project  (www.freetype.org)

  

> I also tried similar code as of
> John Churchill
> Subject:  [Freetype] Distorted characters
> Date:  Fri, 23 Aug 2002 02:24:20 -0700 (PDT)
> 
> void InitFont() {
>         FT_UInt index;
>         FT_GlyphSlot slot;
>         int pitch, start;
>         unsigned char *bitmap, i;
> 
>         if ( FT_Init_FreeType(&Library) ) {
>                 printf("Failed to init freetype.\n");
>                 exit(1);
>         }
> 
>         if ( FT_New_Face(Library, "/arial.ttf", 0, &face) )
>                 printf("Unable to load font.\n");
> 
>         if ( FT_Set_Char_Size(face, 0, 22*64, 300,300) )
>                 printf("Unable to set character size.\n");
> 
> 
>         for (i = 'A'; i < 'A' + 4; i++) {
>                 index = FT_Get_Char_Index(face, i);
> 
>                 if ( FT_Load_Glyph(face, index, FT_LOAD_DEFAULT) )
>                         printf("Unable to load glyph face.\n");
> 
>                 if ( FT_Render_Glyph(face->glyph, 
> ft_render_mode_mono) )
>                         printf("Unable to render glyph\n");
> 
>                 slot   = face->glyph;
>                 pitch  = slot->bitmap.pitch;
> 
>                 bitmap = (unsigned char *) 
> malloc(slot->bitmap.rows * pitch);
> 
>                 if (bitmap == NULL) {
>                         printf("Out of memory.\n");
>                         free(bitmap);
>                         FT_Done_FreeType(Library);
>                         exit(1);
>                 }
>                 memset(bitmap, 0, slot->bitmap.rows * pitch);
> 
>                 for (start=0; start < slot->bitmap.rows; start++)
>                       memcpy(bitmap + pitch * 
> start,slot->bitmap.buffer + start * pitch, pitch);
> }
> 
>                 /*Cpying bitmap to print buffer*/
> 
>                 free(bitmap);
> 
>         }
> 
>         FT_Done_FreeType(Library);
> }
> 
> This code works for me and giving me proper and all 
> characters without any
> garbage. Please comment where Im wrong in first code.
> 
> 
> 
> 
> _______________________________________________
> Freetype mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/freetype
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]