从TTF字体中字模信息
2010-09-04 20:48:13 来源:WEB开发网1、引言
传统上的字模信息一般都是从点阵字体中得到的。然而,点阵字体有一个致命的缺点就是字模信息大小固定,放大字体将产生严重的锯齿形失真。本文介绍了一种利用VC从TTF字体中直接获取字符的字模信息的方法,所获取的字模信息可以达到近似无限的分辨率,可选择2级、5级、17级和65级等多种灰度级,最终将字模信息保存为BMP位图文件格式,方便对字模信息的利用。
2、TTF介绍
TTF是Microsoft公司和Apple公司共同推出的一种轮廓字体。TTF的主要其设计思想是:用一系列点构造字型轮廓,在此基础上用一系列指令调节,使轮廓线变的平滑,从而得到良好的显示效果。TTF是一种矢量字体,可进行字体的无级放大,快速变形等,放大后的字体平常圆润,没有锯齿形失真。利用矢量字库进行字型变换,如平衡、缩放、旋转、 倾斜等,速度快,失真小,效果好,可产生高质量的汉字输出。由于windows操作系统的流行,TTF已成为字体显示的主流,其资源相当丰富,就windows自身就带有上百种TTF字体,网络上可供下载的字体资源大部分也是TTF格式。而反观传统的点阵字体,由于其资源相对较少,字体大小固定单一,在放大缩小时很困难,效果也不好,速度慢,字体单调,锯齿形失真严重,很难达到美观的要求。因而,利用TTF字体来替代点阵字体,以期获取更多种类、更多分辨率、更多灰度级的字模信息,满足社会上对字模信息的多样要求,便是十分必要的。
3、提取TTF字体中字符的字模信息
首先,把所要用的TTF字体库选入当前的DC(Device Context)设备上下文中
CFont newfont;
newfont.CreateFont(m_intHeight,
0,
m_intAngle,
0,
m_intBold,
m_bCheckItalic,
0,
0,
DEFAULT_CHARSET,
OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_DONTCARE,
m_strFontName); //m_strFontName为TTF字体名
//m_intHeight设置字体的高度,值越大,最终获取的字模的分辨率越高。
//m_intAngle设置字体的旋转角度,m_intBold设置字体的粗细程度
//m_bCheckItalic设置字体为斜体与否
CDC* pdc=m_ctlDisplay.GetDC();//获取控件m_ctlDisplay的DC
CFont *poldfont=pdc->SelectObject(&newfont);//将TTF字体对象选入控件m_ctlDisplay的DC中
接下来主要是利用Win32的API函数GetGlyphOutline()来提取TTF字体的字模信息
DWORD GetGlyphOutline(
HDC hdc, // DC句柄
UINT uChar, // 要提取字模的字符
UINT uFormat, // 函数返回的信息格式
LPGLYPHMETRICS lpgm, // GLYPHMETRICS结构的指针
DWORD cbBuffer, // 接收缓存的大小
LPVOID lpvBuffer, // 接收缓存的地址
CONST MAT2 *lpmat2 // MAT2结构的指针
);
赞助商链接