diff options
author | Kushal K S V S <kkushal32@gmail.com> | 2017-07-07 02:38:01 +0530 |
---|---|---|
committer | Kushal K S V S <kkushal32@gmail.com> | 2017-07-07 02:38:01 +0530 |
commit | e5bdfde6dfe101c9ce2871b151f12d223f57afa2 (patch) | |
tree | 4d6b53e19d7aeda4c534a722cb0f7eb9376d7d4a /tests/make_png/make_png.c | |
parent | cf8d9b4ce3fa2c6cd9ccb25585bc17a355c987b0 (diff) | |
parent | 4f5f083dc68dc6f0896e8da529590e88101c3c19 (diff) | |
download | freetype2-e5bdfde6dfe101c9ce2871b151f12d223f57afa2.tar.gz |
Merge branch 'ksvsk_test' of into kushal_glyph_testkushal_glyph_test
Diffstat (limited to 'tests/make_png/make_png.c')
-rw-r--r-- | tests/make_png/make_png.c | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/tests/make_png/make_png.c b/tests/make_png/make_png.c new file mode 100644 index 000000000..8b59d4455 --- /dev/null +++ b/tests/make_png/make_png.c @@ -0,0 +1,178 @@ +#include "bitmap.h" + +int main (int argc, char const *argv[]) +{ + FT_Library library; + FT_Face face; + FT_GlyphSlot slot; + + FT_Bitmap* bitmap; + + FT_Error error; + + const char* font_file; + int size; + int render_mode; // argument + + int load_flag; // FT_LOAD_XXX + int render_flag; // FT_RENDER_MODE_XXX + int target_flag; // FT_LOAD_TARGET_XXX + char* render_type; // for file_name + + char name[100]; // hashes file name + int i; // for loop + + if (argc != 4) + { + printf("\nTo generate 32-bit RGBA PNG(s) of all glyphs in a font\n"); + printf("Images will be saved in a file named \n\ + $(font)_$(pt_size)_$(render_mode)_$(glyph_index).png \n\n"); + + printf("Default: hashes of 256-level gray bitmaps will be generated\n\n"); + + printf("Usage ./<exe> <font_file> <pt_size> <render_mode>\n\n"); + + printf("Values for render_mode 0 - monochrome\n"); + printf(" 1 - anti-aliased\n"); + printf(" 2 - lcd horizontal-RGB\n"); + printf(" 3 - lcd horizontal-BGR\n"); + printf(" 4 - lcd vertical-RGB\n"); + printf(" 5 - lcd vertical-BGR\n"); + + return 1; + } + + font_file = argv[1]; + size = atof(argv[2]); + render_mode = atoi(argv[3]); + + error = FT_Init_FreeType( &library ); + if(error){ + printf("Error while initialising library\n"); + } + + if (render_mode > 1 ) + { + error = FT_Library_SetLcdFilter( library, + FT_LCD_FILTER_DEFAULT ); + if(error){ + printf("Error while setting LCD filter\n"); + } + } + + error = FT_New_Face( library, + font_file, + 0, + &face ); + if(error){ + printf("Error loading new face\n"); + } + + error = FT_Set_Char_Size( face, + size * 64, + 0, + DPI, + 0 ); + if(error){ + printf("Error setting character size\n"); + } + + switch ( render_mode ) { + case 0: render_flag = FT_RENDER_MODE_MONO; + load_flag = FT_LOAD_MONOCHROME; + target_flag = FT_LOAD_TARGET_MONO; + render_type = "mono"; + break; + + case 1: render_flag = FT_RENDER_MODE_NORMAL; + load_flag = FT_LOAD_DEFAULT; + target_flag = FT_LOAD_TARGET_NORMAL; + render_type = "gray"; + break; + + case 2: render_flag = FT_RENDER_MODE_LCD; + load_flag = FT_LOAD_DEFAULT; + target_flag = FT_LOAD_TARGET_LCD; + render_type = "lcd_rgb"; + break; + + case 3: render_flag = FT_RENDER_MODE_LCD; + load_flag = FT_LOAD_DEFAULT; + target_flag = FT_LOAD_TARGET_LCD; + render_type = "lcd_bgr"; + break; + + case 4: render_flag = FT_RENDER_MODE_LCD_V; + load_flag = FT_LOAD_DEFAULT; + target_flag = FT_LOAD_TARGET_LCD_V; + render_type = "lcd_ver_rgb"; + break; + + case 5: render_flag = FT_RENDER_MODE_LCD_V; + load_flag = FT_LOAD_DEFAULT; + target_flag = FT_LOAD_TARGET_LCD_V; + render_type = "lcd_ver_bgr"; + break; + + default:render_flag = FT_RENDER_MODE_NORMAL; + load_flag = FT_LOAD_DEFAULT; + target_flag = FT_LOAD_TARGET_NORMAL; + render_type = "gray"; + } + + slot = face->glyph; + + sprintf(name,"./images/%s_%d_%s", font_file, + size, + render_type); + + for (i = 0; i <face->num_glyphs; ++i) + { + error = FT_Load_Glyph( face, + i, + load_flag | target_flag); + if(error){ + printf("Error loading glyph\n"); + } + + FT_Render_Glyph( slot, + render_flag); + if(error){ + printf("Error rendering the glyph\n"); + } + + bitmap = &slot->bitmap; + + if (bitmap->width == 0 || bitmap->rows == 0) + { + continue; + } + + FT_Bitmap target; + FT_Bitmap_Init( &target ); + + int alignment = 4; + error = FT_Bitmap_Convert( library, + bitmap, + &target, + alignment); + if(error){ + printf("Error converting the bitmap\n"); + } + + if (render_mode == 0) + { + Make_PNG(&target,name,i,render_mode); + + }else{ + + Make_PNG(bitmap,name,i,render_mode); + } + } + + FT_Done_Face ( face ); + FT_Done_FreeType( library ); + + return 0; + +} |