FT_Library library = NULL;
FT_Face face = NULL;
//初始化Freetype库,载入字库
static FT_Error osd_load_ft_font(char *filename, int height)
{
FT_Error error;
error = FT_Init_FreeType( &library ); /* initialize library */
/* error handling omitted */
if(error)
printf("osd_load_ft_font error: FT_Init_FreeType/n");
error = FT_New_Face( library, filename, 0, &face ); /* create face object */
/* error handling omitted */
if(error)
printf("osd_load_ft_font error: FT_New_Face/n");
/* set character size */
error = FT_Set_Char_Size( face, height * 64, 0, 100, 100 );
if(error)
printf("osd_load_ft_font error: FT_Set_Char_Size/n");
return error;
}
//卸载字库以及freetype库
static void osd_unload_ft_font()
{
if (library == NULL)
return;
FT_Done_Face ( face );
FT_Done_FreeType( library );
}
//显示字
glyph_index = FT_Get_Char_Index(face, unicode[n]);
FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
FT_Render_Glyph(face->glyph, ft_render_mode_normal);
for(p=0;p<slot->bitmap.width;p++)
for(q=0;q<slot->bitmap.rows;q++)
{
gray = slot->bitmap.buffer[q * slot->bitmap.width + p];
{
char r, g, b;
r = ((前景色 & 0x00ff0000) >> 16) * gray / 255 + ((背景色 & 0x00ff0000) >> 16) * (255 - gray) / 255;
g = ((前景色 & 0x0000ff00) >> 8) * gray / 255 + ((背景色 & 0x0000ff00) >> 8) * (255 - gray) / 255;
b = ((前景色 & 0x000000ff) ) * gray / 255 + ((背景色 & 0x000000ff) ) * (255 - gray) / 255;
}
}