|
我用VC写了一个基于Freetype2 的DEMO程序,按照网上的例子,但不知道为什么,对小号的字体不支持。
[复制链接]
我用VC写了一个基于Freetype2 的DEMO程序,按照网上的例子,但不知道为什么,对小号的字体不支持。
// TODO: Add extra initialization here
FT_Init_FreeType( &library );
FT_New_Face( library, "simfang.ttf", 0, &face );
//大小要乘64.这是规定。照做就可以了。
//FT_Set_Char_Size( face,16<< 6, 16 << 6, 96, 96);
FT_Set_Pixel_Sizes( face, 21, 0);
void PrintChar(int x,int y,int ch,HDC hdc)
{
FT_Load_Glyph( face, FT_Get_Char_Index( face, ch), FT_LOAD_DEFAULT );
//得到字模
FT_Glyph glyph;
int result = FT_Get_Glyph( face->glyph, &glyph );
//TT_Get_Glyph_Metrics(_ttg,&_ttgm);
//转化成位图
int result0 = FT_Render_Glyph( face->glyph, FT_RENDER_MODE_NORMAL );
//FT_RENDER_MODE_NORMAL
int result1 = FT_Glyph_To_Bitmap( &glyph, ft_render_mode_normal, 0, 1 );
FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph;
//取道位图数据
FT_Bitmap& bitmap=bitmap_glyph->bitmap;
TRACE("bitmap.num_grays:%d\n",bitmap.num_grays);
//把位图数据拷贝自己定义的数据区里.这样旧可以画到需要的东西上面了。
int width = bitmap.width;
int height = bitmap.rows;
unsigned char* expanded_data = new unsigned char[ 3 * width * height];
for(int j=0; j
{
for(int i=0; i < width; i++)
{
expanded_data[3*(i+(height-j-1)*width)]=
expanded_data[3*(i+(height-j-1)*width)+1] =
expanded_data[3*(i+(height-j-1)*width)+2] =
(i>=bitmap.width || j>=bitmap.rows) ?
0 : bitmap.buffer[i + bitmap.width*j];
SetPixel(hdc,i + x,j + y,RGB(expanded_data[3*(i+(height-j-1)*width)],expanded_data[3*(i+(height-j-1)*width)],expanded_data[3*(i+(height-j-1)*width)]));
}
}
TRACE("height:%d,width:%d\n",height,width);
free(expanded_data);
}
|
|