WEB开发网
开发学院软件开发VC 从TTF字体中字模信息 阅读

从TTF字体中字模信息

 2010-09-04 20:48:13 来源:WEB开发网   
核心提示:1、引言传统上的字模信息一般都是从点阵字体中得到的,然而,从TTF字体中字模信息,点阵字体有一个致命的缺点就是字模信息大小固定,放大字体将产生严重的锯齿形失真,把所要用的TTF字体库选入当前的DC(Device Context)设备上下文中CFont newfont;newfont.CreateFont(m_intHe

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结构的指针
);

1 2  下一页

Tags:TTF 字体 字模

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接