freetype2

# include   < ft2build . h >
# include  FT_FREETYPE_H

int  main ( int  argc ,   char   * * argv )
{
    FT_Library library ;
    FT_Face face ;
     int   error ;
     int  i ,  j ,  k ,  counter ;
     unsigned   char  temp ;
     int  char_index ;
     int  font_size ;

     if   ( argc  ! =  4 )
     {
         printf ( "Usage: test filename font_size index\n" ) ;
         return  0 ;
     }

    char_index  =   atoi ( argv [ 3 ] ) ;
    font_size  =   atoi ( argv [ 2 ] ) ;

     error   =  FT_Init_FreeType ( & library ) ;
     if   ( error )
     {
         printf ( "can not init free type library!\n" ) ;
         return  0 ;
     }

     error   =  FT_New_Face ( library ,  argv [ 1 ] ,  0 ,   & face ) ;
     if   ( error )
     {
         printf ( "create new face falied!\n" ) ;
         return  0 ;
     }

     error   =  FT_Set_Pixel_Sizes ( face ,  0 ,  font_size ) ;
     if   ( error )
     {
         printf ( "set font size error!\n" ) ;
         return  0 ;
     }


     //printf("file family name %s\n", face->family_name);

     //printf("file style name %s\n", face->style_name);

     //printf("number of char %d\n", face->num_glyphs);

     //printf("number of fixed bitmap %d\n", face->num_fixed_sizes);

//printf("Char size %d\n", face->size);


     error   =  FT_Load_Glyph ( face ,  char_index ,  FT_LOAD_DEFAULT ) ;
     if   ( error )
     {
         printf ( "Load char error!\n" ) ;
         return  0 ;
     }

     if   ( face - > glyph - > format  ! =  FT_GLYPH_FORMAT_BITMAP )
     {
         error   =  FT_Render_Glyph ( face - > glyph ,  FT_RENDER_MODE_MONO ) ;
         if   ( error )
         {
             printf ( "render char failed!\n" ) ;
             return  0 ;
         }
     }

// printf("rows %d, width %d\n", face->glyph->bitmap.rows, face->glyph->bitmap.width);

     //printf("pitch %d\n", face->glyph->bitmap.pitch);

// printf("bit_map_left %d bit_map_top %d\n", face->glyph->bitmap_left,

// face->glyph->bitmap_top);

// printf("width %d height %d\n", face->glyph->metrics.width, face->glyph->metrics.height);

// printf("%d %d %d\n", face->glyph->metrics.horiBearingX, face->glyph->metrics.horiBearingY,

// face->glyph->metrics.horiAdvance);


     for   ( =  0 ;  j  <   ( font_size  *  26 )   /  32  -  face - > glyph - > bitmap_top ;  j + + )
     {
         for   ( =  0 ;  i  <  font_size ;  i + + )
         {
             printf ( "_" ) ;
         }
         printf ( "\n" ) ;
     }

     for   ( ;  j  <  face - > glyph - > bitmap . rows  +   ( font_size  *  26 )   /  32  -  face - > glyph - > bitmap_top ;  j + + )
     {
         for   ( =  1 ;  i  < =  face - > glyph - > bitmap_left ;  i + + )
         {
             printf ( "_" ) ;
         }

         for   ( =  0 ;  k  <  face - > glyph - > bitmap . pitch ;  k + + )
         {
            temp  =  face - > glyph - > bitmap . buffer [ face - > glyph - > bitmap . pitch * ( +  face - > glyph - > bitmap_top  -   ( font_size  *  26 )   /  32 )   +  k ] ;
             for   ( counter  =  0 ;  counter  <  8 ;  counter + + )
             {
  if   ( temp  &  0x80 )
                 {
                     printf ( "*" ) ;
                 }
                 else
                 {
                     printf ( "_" ) ;
                 }
                temp  < < =  1 ;
                i + + ;
                 if   ( >  font_size )
                 {
                     break ;
                 }
             }
         }

         for   ( ;  i  < =  font_size ;  i + + )
         {
         // printf("|");

         }
         printf ( "\n" ) ;
     }

     for   ( ;  j  <  font_size ;  j + + )
     {
         for   ( =  0 ;  i  <  font_size ;  i + + )
         {
             printf ( "_" ) ;
         }
         printf ( "\n" ) ;
     }

     return  0 ;
}

你可能感兴趣的:(freetype2)