5.7 点阵字模生成原理与方法
[3]
5.7.1 字模生成原理
本设计中因为使用汉字的点阵显示,需要提取汉字字模,因此我
们首先来了解汉字点阵字模的提取方法。
[
Windows API 一日一练(90)GetGlyphOutline 函数 收藏
中西文化的差异,导致在电子信息里处理也大不相同,在英文里只需要 26 个字母就可以显
示所有文章了,而在中文里需要最基本的字符就有 2000 多个。对于一些在嵌入式软件里要
显示的字符,那么就得手动去构造所有图形,这是一个比较大的工作量,如果让每个厂家
都去完成这个任务,显然是不可能的。面对着大量嵌入式用户的需求,那么就需要解决中
文字模的图形问题。毕竟大家经常使用 Windows,最先想到的,肯定是怎么样把里面的字
符提取图形出来,生成自己需要的几个字库。下面就来介绍怎么样用函数 GetGlyphOutline
获取显示字符的图形数据。
函数 GetGlyphOutline 声明如下:
WINGDIAPI DWORD WINAPI GetGlyphOutlineA( __in HDC hdc,
__in UINT uChar,
__in UINT fuFormat,
__out LPGLYPHMETRICS lpgm,
__in DWORD cjBuffer,
__out_bcount_opt(cjBuffer) LPVOID pvBuffer,
__in CONST MAT2 *lpmat2
);
WINGDIAPI DWORD WINAPI GetGlyphOutlineW( __in HDC hdc,
__in UINT uChar,
__in UINT fuFormat,
__out LPGLYPHMETRICS lpgm,
__in DWORD cjBuffer,
__out_bcount_opt(cjBuffer) LPVOID pvBuffer,
__in CONST MAT2 *lpmat2
);
#ifdef UNICODE
#define GetGlyphOutline GetGlyphOutlineW
#else
#define GetGlyphOutline GetGlyphOutlineA
#endif // !UNICODE
hdc 是设备句柄。
uChar 是需要获取图形数据的字符。
fuFormat 是获取数据的格式。
lpgm 是获取字符的相关信息。
cjBuffer 是保存字符数据的缓冲区大小。
pvBuffer 是保存字符数据的缓冲区。
lpmat2 是 3*3 的变换矩阵。
调用函数的例子如下:
#001 //浮点数据转换为固定浮点数。
#002 FIXED FixedFromDouble(double d)