#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 (j = 0; j < (font_size * 26) / 32 - face->glyph->bitmap_top; j++)
{
for (i = 0; i < font_size; i++)
{
printf("_");
}
printf("\n");
}
for (; j < face->glyph->bitmap.rows + (font_size * 26) / 32 - face->glyph->bitmap_top; j++)
{
for (i = 1; i <= face->glyph->bitmap_left; i++)
{
printf("_");
}
for (k = 0; k < face->glyph->bitmap.pitch; k++)
{
temp = face->glyph->bitmap.buffer[face->glyph->bitmap.pitch*(j + 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 (i > font_size)
{
break;
}
}
}
for (; i <= font_size; i++)
{
// printf("|");
}
printf("\n");
}
for (; j < font_size; j++)
{
for (i = 0; i < font_size; i++)
{
printf("_");
}
printf("\n");
}
return 0;
}
|