static void i_tt_uninit(void *p) { i_tt_engine *tteng = p; if (tteng->initialized) { mm_log((1, "finalizing FT1 state %p\n", tteng)); TT_Done_FreeType(tteng->engine); } mm_log((1, "freeing FT1 state %p\n", tteng)); myfree(tteng); }
SWFFont loadSWFFontfromTTF(char *filename) { int i; TT_Engine *engine; TT_Face face; TT_Instance instance; TT_Glyph glyph; TT_Glyph_Metrics metrics; TT_Outline outline; TT_CharMap charmap; TT_Face_Properties properties; TT_UShort pid, eid; TT_Init_FreeType(engine); error = TT_Open_Face(engine, filename, &face); if(error) fprintf(stderr, "Could not open face.\n"); TT_Get_Face_Properties(face, &properties); for(i=0; i<properties->num_CharMaps; ++i) TT_Get_CharMap_ID(face, i, &pid, &eid); TT_Get_CharMap(face, charmapIndex, &charmap); TT_New_Instance(face, &instance); TT_New_Glyph(face, &glyph); for(i=0; i<whatever; ++i) { TT_Load_Glyph(instance, glyph, TT_Char_Index(charmap, i), loadFlags); TT_Get_Glyph_Outline(glyph, &outline); TT_Get_Glyph_Metrics(glyph, &metrics); } TT_Done_FreeType(engine); }
int main( int argc, char** argv ) { int i; char filename[128 + 4]; char alt_filename[128 + 4]; char* execname; char* fname; #ifdef HAVE_LIBINTL_H setlocale( LC_ALL, "" ); bindtextdomain( "freetype", LOCALEDIR ); textdomain( "freetype" ); #endif execname = argv[0]; if ( argc < 3 ) Usage( execname ); if ( sscanf( argv[1], "%d", &ptsize ) != 1 ) Usage( execname ); /* Initialize engine */ if ( (error = TT_Init_FreeType( &engine )) ) { fprintf( stderr, gettext( "Error while initializing engine.\n" ) ); goto Failure; } if ( (error = TT_Init_SBit_Extension( engine )) ) { fprintf( stderr, gettext( "Error while initializing embedded bitmap extension.\n" ) ); goto Failure; } /* Now check all files */ fname = argv[2]; i = strlen( fname ); while ( i > 0 && fname[i] != '\\' && fname[i] != '/' ) { if ( fname[i] == '.' ) i = 0; i--; } filename[128] = '\0'; alt_filename[128] = '\0'; strncpy( filename, fname, 128 ); strncpy( alt_filename, fname, 128 ); if ( i >= 0 ) { strncpy( filename + strlen( filename ), ".ttf", 4 ); strncpy( alt_filename + strlen( alt_filename ), ".ttc", 4 ); } /* Load face */ error = TT_Open_Face( engine, filename, &face ); if ( error == TT_Err_Could_Not_Open_File ) { strcpy( filename, alt_filename ); error = TT_Open_Face( engine, alt_filename, &face ); } i = strlen( filename ); fname = filename; while ( i >= 0 ) if ( filename[i] == '/' || filename[i] == '\\' ) { fname = filename + i + 1; i = -1; } else i--; if ( error ) { fprintf( stderr, gettext( "Could not find or open %s.\n" ), filename ); goto Failure; } if ( error ) { fprintf( stderr, gettext( "Error while opening %s.\n" ), filename ); goto Failure; } /* get face properties */ TT_Get_Face_Properties( face, &properties ); num_glyphs = properties.num_Glyphs; error = TT_Get_Face_Bitmaps( face, &eblc ); if ( error == TT_Err_Table_Missing ) { fprintf( stderr, gettext( "Could not find embedded bitmaps in this font.\n" ) ); goto Failure; } if ( error ) { fprintf( stderr, gettext( "Error while loading embedded bitmaps.\n" ) ); goto Failure; } /* create instance */ error = TT_New_Instance( face, &instance ); if ( error ) { fprintf( stderr, gettext( "Could not create instance.\n" ) ); goto Failure; } error = TT_Set_Instance_PixelSizes( instance, ptsize, ptsize, ptsize*3/4 ); if ( error ) { fprintf( stderr, gettext( "Could not set point size to %d.\n" ), ptsize ); goto Failure; } error = TT_New_SBit_Image( &bitmap ); if ( error ) { fprintf( stderr, gettext( "Could not allocate glyph bitmap container.\n" ) ); goto Failure; } for ( i = 3; i < argc; i++ ) { unsigned short glyph_index; /* we use %i to allow the prefixes `0x' and `0' */ if ( sscanf( argv[i], "%hi", &glyph_index ) != 1 ) Usage( execname ); error = TT_Load_Glyph_Bitmap( face, instance, glyph_index, bitmap ); if ( error == TT_Err_Invalid_Glyph_Index ) { fprintf( stderr, gettext( " no bitmap for glyph %d.\n" ), glyph_index ); continue; } if ( error ) { fprintf( stderr, gettext( "Can't load bitmap for glyph %d.\n" ), glyph_index ); goto Failure; } /* Dump the resulting bitmap */ { printf( gettext( "glyph index %d = %dx%d pixels, " ), glyph_index, bitmap->map.rows, bitmap->map.width ); printf( gettext( "advance = %ld, minBearing = [%ld,%ld]\n" ), (long)(bitmap->metrics.horiAdvance / 64), (long)(bitmap->metrics.horiBearingX / 64), (long)(bitmap->metrics.horiBearingY / 64)); Show_Single_Glyph( &bitmap->map ); } } TT_Done_SBit_Image( bitmap ); TT_Done_FreeType( engine ); exit( EXIT_SUCCESS ); /* for safety reasons */ return 0; /* never reached */ Failure: fprintf( stderr, " " ); fprintf( stderr, gettext( "FreeType error message: %s\n" ), TT_ErrToString18( error ) ); exit( EXIT_FAILURE ); return 0; /* never reached */ }
int main( int argc, char** argv ) { int i, total, mode, base, rendered_glyphs; char filename[128 + 4]; char alt_filename[128 + 4]; char* execname; long t, t0, tz0; execname = argv[0]; gray_render = 0; visual = 0; while ( argc > 1 && argv[1][0] == '-' ) { switch ( argv[1][1] ) { case 'g': gray_render = 1; break; case 'v': visual = 1; break; default: Panic( "Unknown argument '%s'!\n", argv[1] ); } argc--; argv++; } if ( argc != 2 ) { fprintf( stderr, "fttimer: simple performance timer -- part of the FreeType project\n" ); fprintf( stderr,"-----------------------------------------------------------------\n\n" ); fprintf( stderr,"Usage: %s [-g] [-v] fontname[.ttf|.ttc]\n\n", execname ); fprintf( stderr," where '-g' asks for gray-levels rendering\n" ); fprintf( stderr," '-v' displays while rendering (slower)\n" ); exit( EXIT_FAILURE ); } i = strlen( argv[1] ); while ( i > 0 && argv[1][i] != '\\' ) { if ( argv[1][i] == '.' ) i = 0; i--; } filename[128] = '\0'; alt_filename[128] = '\0'; strncpy( filename, argv[1], 128 ); strncpy( alt_filename, argv[1], 128 ); if ( i >= 0 ) { strncpy( filename + strlen( filename ), ".ttf", 4 ); strncpy( alt_filename + strlen( alt_filename ), ".ttc", 4 ); } /* Initialize engine */ if ( (error = TT_Init_FreeType( &engine )) ) Panic( "Error while initializing engine, code = 0x%x.\n", error ); /* Load face */ error = TT_Open_Face( engine, filename, &face ); if ( error == TT_Err_Could_Not_Open_File ) { strcpy( filename, alt_filename ); error = TT_Open_Face( engine, alt_filename, &face ); } if ( error == TT_Err_Could_Not_Open_File ) Panic( "Could not find/open %s.\n", filename ); else if ( error ) Panic( "Error while opening %s, error code = 0x%x.\n", filename, error ); /* get face properties and allocate preload arrays */ TT_Get_Face_Properties( face, &properties ); num_glyphs = properties.num_Glyphs; tab_glyphs = MAX_GLYPHS; if ( tab_glyphs > num_glyphs ) tab_glyphs = num_glyphs; /* create glyph */ error = TT_New_Glyph( face, &glyph ); if ( error ) Panic( "Could not create glyph container.\n" ); /* create instance */ error = TT_New_Instance( face, &instance ); if ( error ) Panic( "Could not create instance for %s.\n", filename ); error = TT_Set_Instance_CharSize( instance, 400*64 ); if ( error ) Panic( "Could not reset instance for %s.\n", filename ); if ( gray_render ) mode = Graphics_Mode_Gray; else mode = Graphics_Mode_Mono; if ( visual ) { if ( !SetGraphScreen( mode ) ) Panic( "Could not set graphics mode.\n" ); TT_Set_Raster_Gray_Palette( engine, gray_palette ); } else { /* This is the default bitmap size used */ vio_Width = 640; vio_Height = 450; } Init_Engine(); Num = 0; Fail = 0; total = num_glyphs; base = 0; rendered_glyphs = 0; t0 = 0; /* Initial time */ tz0 = Get_Time(); while ( total > 0 ) { /* First, preload 'tab_glyphs' in memory */ cur_glyph = 0; cur_point = 0; cur_contour = 0; printf( "loading %d glyphs", tab_glyphs ); for ( Num = 0; Num < tab_glyphs; Num++ ) { error = LoadTrueTypeChar( base + Num ); if ( error ) Fail++; total--; } base += tab_glyphs; if ( tab_glyphs > total ) tab_glyphs = total; printf( ", rendering... " ); /* Now, render the loaded glyphs */ t = Get_Time(); for ( Num = 0; Num < cur_glyph; Num++ ) { if ( (error = ConvertRaster( Num )) ) Fail++; else { rendered_glyphs ++; if ( visual ) { sprintf( Header, "Glyph: %5d", Num ); Display_Bitmap_On_Screen( Bit.bitmap, Bit.rows, Bit.cols ); Clear_Buffer(); } } } t = Get_Time() - t; if ( t < 0 ) t += 100L * 60 * 60; printf( " = %f s\n", (double)t / 1000 ); t0 += t; /* Now free all loaded outlines */ for ( Num = 0; Num < cur_glyph; Num++ ) TT_Done_Outline( &outlines[Num] ); } tz0 = Get_Time() - tz0; if ( visual ) RestoreScreen(); TT_Close_Face( face ); printf( "\n" ); printf( "rendered glyphs = %d\n", rendered_glyphs ); printf( "render time = %f s\n", (double)t0 / 1000 ); printf( "fails = %d\n", Fail ); printf( "average glyphs/s = %f\n", (double)rendered_glyphs / t0 * 1000 ); printf( "total timing = %f s\n", (double)tz0 / 1000 ); printf( "Fails = %d\n", Fail ); TT_Done_FreeType( engine ); exit( EXIT_SUCCESS ); /* for safety reasons */ return 0; /* never reached */ }
int main( int argc, char** argv ) { int i, orig_ptsize, file; char filename[128 + 4]; char alt_filename[128 + 4]; char* execname; int option; int ptsize; int num_Faces = 0; int glyph_index = 0; int load_flags = TTLOAD_DEFAULT; int force_sbit = 0; TT_Engine engine; TT_Face face; TT_Instance instance; TT_Glyph glyph; TT_Raster_Map map; TT_Big_Glyph_Metrics metrics; TT_Face_Properties properties; TT_Instance_Metrics imetrics; TT_EBLC eblc; TT_SBit_Image* bitmap = NULL; TT_Error error; int res = 72; #ifdef HAVE_LIBINTL_H setlocale( LC_ALL, "" ); bindtextdomain( "freetype", LOCALEDIR ); textdomain( "freetype" ); #endif execname = ft_basename( argv[0] ); while ( 1 ) { option = ft_getopt( argc, argv, "c:r:i:B" ); if ( option == -1 ) break; switch ( option ) { case 'r': res = atoi( ft_optarg ); if ( res < 1 ) usage( execname ); break; case 'c': num_Faces = atoi( ft_optarg ); if ( num_Faces < 0 ) usage( execname ); break; case 'i': glyph_index = atoi( ft_optarg ); if ( glyph_index < 0 ) usage( execname ); break; case 'B': force_sbit = 1; break; default: usage( execname ); break; } } argc -= ft_optind; argv += ft_optind; if ( argc <= 1 ) usage( execname ); if ( sscanf( argv[0], "%d", &orig_ptsize ) != 1 ) orig_ptsize = 64; file = 1; ptsize = orig_ptsize; i = strlen( argv[file] ); while ( i > 0 && argv[file][i] != '\\' && argv[file][i] != '/' ) { if ( argv[file][i] == '.' ) i = 0; i--; } filename[128] = '\0'; alt_filename[128] = '\0'; strncpy( filename, argv[file], 128 ); strncpy( alt_filename, argv[file], 128 ); if ( i >= 0 ) { strncpy( filename + strlen( filename ), ".ttf", 4 ); strncpy( alt_filename + strlen( alt_filename ), ".ttc", 4 ); } /* Initialize engine */ error = TT_Init_FreeType( &engine ); if ( error ) { fprintf( stderr, gettext( "Error while initializing engine.\n" ) ); goto Failure; } error = TT_Init_SBit_Extension( engine ); if ( error ) { fprintf( stderr, gettext( "Error while initializing embedded bitmap extension.\n" ) ); goto Failure; } /* Load face */ error = TT_Open_Face( engine, filename, &face ); if ( error == TT_Err_Could_Not_Open_File ) { strcpy( filename, alt_filename ); error = TT_Open_Face( engine, alt_filename, &face ); } if ( error == TT_Err_Could_Not_Open_File ) Panic( gettext( "Could not find or open %s.\n" ), filename ); if ( error ) { fprintf( stderr, gettext( "Error while opening %s.\n" ), filename ); goto Failure; } TT_Get_Face_Properties( face, &properties ); printf( gettext( "There are %d fonts in this collection.\n" ), (int)(properties.num_Faces) ); if ( num_Faces >= properties.num_Faces ) Panic( gettext( "There is no collection with index %d in this font file.\n" ), num_Faces ); TT_Close_Face( face ); error = TT_Open_Collection( engine, filename, num_Faces, &face ); /* get face properties and eblc */ TT_Get_Face_Properties( face, &properties ); if ( force_sbit ) { error = TT_Get_Face_Bitmaps( face, &eblc ); if ( error == TT_Err_Table_Missing ) Panic( gettext( "There is no embedded bitmap data in the font.\n" ) ); if ( error ) { fprintf( stderr, gettext( "Error while retrieving embedded bitmaps table.\n" ) ); goto Failure; } } /* create glyph */ error = TT_New_Glyph( face, &glyph ); if ( error ) { fprintf( stderr, gettext( "Could not create glyph container.\n" ) ); goto Failure; } /* create instance */ error = TT_New_Instance( face, &instance ); if ( error ) { fprintf( stderr, gettext( "Could not create instance.\n" ) ); goto Failure; } error = TT_Set_Instance_Resolutions( instance, res, res ); if ( error ) { fprintf( stderr, gettext( "Could not set device resolutions.\n" ) ); goto Failure; } error = TT_Set_Instance_CharSize( instance, ptsize*64 ); if ( error ) { fprintf( stderr, gettext( "Could not reset instance.\n" ) ); goto Failure; } TT_Get_Instance_Metrics( instance, &imetrics ); printf( gettext( "Instance metrics: ppemX %d, ppemY %d\n" ), imetrics.x_ppem, imetrics.y_ppem ); if ( force_sbit ) { error = TT_New_SBit_Image( &bitmap ); if ( error ) { fprintf( stderr, gettext( "Could not allocate glyph bitmap container.\n" ) ); goto Failure; } error = TT_Load_Glyph_Bitmap( face, instance, glyph_index, bitmap ); if ( error ) { fprintf( stderr, gettext( "Can't load bitmap for glyph %d.\n" ), glyph_index ); goto Failure; } Show_Metrics( bitmap->metrics, "SBit's metrics" ); printf( "SBit glyph:\n" ); Show_Single_Glyph( &bitmap->map ); } else { TT_Load_Glyph( instance, glyph, glyph_index, load_flags ); TT_Get_Glyph_Big_Metrics( glyph, &metrics ); map.width = ( metrics.bbox.xMax - metrics.bbox.xMin ) / 64; map.rows = ( metrics.bbox.yMax - metrics.bbox.yMin ) / 64; map.cols = ( map.width + 7 ) / 8; map.size = map.cols * map.rows; map.bitmap = malloc( map.size ); map.flow = TT_Flow_Down; memset( map.bitmap, 0, map.size ); error = TT_Get_Glyph_Bitmap( glyph, &map, -metrics.bbox.xMin, -metrics.bbox.yMin ); Show_Metrics( metrics, gettext( "Outline's metrics" ) ); printf( gettext( "Outline glyph\n" ) ); Show_Single_Glyph( &map ); } free( map.bitmap ); if ( bitmap ) TT_Done_SBit_Image( bitmap ); TT_Done_Instance( instance ); TT_Done_Glyph( glyph ); TT_Done_FreeType( engine ); exit( EXIT_SUCCESS ); /* for safety reasons */ return 0; /* never reached */ Failure: fprintf( stderr, " " ); fprintf( stderr, gettext( "FreeType error message: %s\n" ), TT_ErrToString18( error ) ); exit( EXIT_FAILURE ); return 0; /* never reached */ }
int main( int argc, char** argv ) { int i; char filename[128 + 4]; char alt_filename[128 + 4]; char* execname; char* gt; #ifdef HAVE_LIBINTL_H setlocale( LC_ALL, "" ); bindtextdomain( "freetype", LOCALEDIR ); textdomain( "freetype" ); #endif execname = argv[0]; if ( argc != 2 ) { gt = gettext( "ftdump: Simple TrueType Dumper -- part of the FreeType project" ); fprintf( stderr, "%s\n", gt ); separator_line( stderr, strlen( gt ) ); fprintf( stderr, gettext( "Usage: %s fontname[.ttf|.ttc]\n\n" ), execname ); exit( EXIT_FAILURE ); } i = strlen( argv[1] ); while ( i > 0 && argv[1][i] != '\\' ) { if ( argv[1][i] == '.' ) i = 0; i--; } filename[128] = '\0'; alt_filename[128] = '\0'; strncpy( filename, argv[1], 128 ); strncpy( alt_filename, argv[1], 128 ); if ( i >= 0 ) { strncpy( filename + strlen( filename ), ".ttf", 4 ); strncpy( alt_filename + strlen( alt_filename ), ".ttc", 4 ); } /* Initialize engine */ old_memory = 0; if ( (error = TT_Init_FreeType( &engine )) ) { fprintf( stderr, gettext( "Error while initializing engine.\n" ) ); goto Failure; } if ( (error = TT_Init_SBit_Extension( engine )) ) { fprintf( stderr, gettext( "Error while initializing embedded bitmap extension.\n" ) ); goto Failure; } if ( (error = TT_Init_GSUB_Extension( engine )) ) { fprintf( stderr, gettext( "Error while initializing GSUB extension.\n" ) ); goto Failure; } FOOTPRINT( initial_overhead ); /* Open and Load face */ error = TT_Open_Face( engine, filename, &face ); if ( error == TT_Err_Could_Not_Open_File ) { strcpy( filename, alt_filename ); error = TT_Open_Face( engine, alt_filename, &face ); } if ( error == TT_Err_Could_Not_Open_File ) Panic( gettext( "Could not find or open %s.\n" ), filename ); if ( error ) { fprintf( stderr, gettext( "Error while opening %s.\n" ), filename ); goto Failure; } FOOTPRINT( face_object ); /* get face properties and allocate preload arrays */ TT_Get_Face_Properties( face, &properties ); num_glyphs = properties.num_Glyphs; /* Now do various dumps */ if ( flag_names ) Print_Names(); if ( flag_encodings ) Print_Encodings(); if ( flag_cmap ) Print_Cmap(); if ( flag_sbits ) Print_SBits(); if ( flag_ttopen ) Print_GSUB(); #ifndef FREETYPE_DLL /* the statistics are meaningless if we use a DLL. */ if ( flag_memory ) Print_Memory(); #endif TT_Close_Face( face ); TT_Done_FreeType( engine ); exit( EXIT_SUCCESS ); /* for safety reasons */ return 0; /* never reached */ Failure: fprintf( stderr, " " ); Panic( gettext( "FreeType error message: %s\n" ), TT_ErrToString18( error ) ); return 0; /* never reached */ }