最近很多TX给我发邮件要Freetype2 Demo的源代码。
我在之前的博客中说过在开源IndieLib论坛上我已经发布了VJGUI,那里包含了所有freetype2 Demo的核心代码。但是最近我已打算离开那个项目了,因为做引擎核心的创始人很久没有露面和更新了。
所以我打算写一篇文章说说那些代码。原来的那个Demo(这里 )是仓促写的,代码比较难看,所以我会稍作整理,将一些最有用的核心代码贴出来与大家分享
(未完待续)......
2009年7月11日继续
下面贴出关键源代码:(本来想上传整个Demo,后来发现写得太丑了,真不好意思拿出手)
1. 初始化FT lib
FT_Library library; /* handle to library */
FT_Face face; /* handle to face object */
// 1. Init the library
if ( FT_Init_FreeType( &library ) )
{
MessageBox(_T("Init freetype library failed."), _T("Error"), MB_OK | MB_ICONERROR);
FT_Done_FreeType(library);
return;
}
int nface = 0;
//nface = 1;
//pathstring是TTF文件的路径
FT_Error error = FT_New_Face(
library,
pathstring,
nface,
&face );
if ( error == FT_Err_Unknown_File_Format )
{
MessageBox(_T("Font format not supported."), _T("Error"), MB_OK | MB_ICONERROR);
FT_Done_FreeType(library);
return;
}
else if ( error )
{
MessageBox(_T("Font face open failed."), _T("Error"), MB_OK | MB_ICONERROR);
FT_Done_FreeType(library);
return;
}
2. 获取font face信息
AddMessage(_T("Face information:"));
//glyph数量
sMessage.Format(_T(" Totally %d glyphs."), face->num_glyphs);
AddMessage(sMessage);
//每EM unit数量
sMessage.Format(_T(" %d uints per EM."), face->units_per_EM);
AddMessage(sMessage);
//char map数量
sMessage.Format(_T(" %d char maps."), face->num_charmaps);
AddMessage(sMessage);
//fix size
//这个对于汉字很重要,fix size对于小字体显示很有帮助
sMessage.Format(_T(" %d fixed sizes:"), face->num_fixed_sizes);
if(face-