9.3、字库文件说明
字库文件包含三部分,文件信息头、字库信息头、文件数据;
a、文件信息头:
{
WORD hfType;//文件类型,固定数据0x4B5A
WORD hfVersion;//文件版本,固定数据,0x0000
DWORD hfSize;//文件大小,总的字库文件大小,包含文件信息头、字库信息头和文件数据;
WORD hfReserved1;//保留数据,始终为0;
WORD hfReserved2;//保留数据,始终为0;
DWORD hfOffBits;//文件信息头和字库信息头总大小,固定数据,0x004C;
}
b、字库信息头
{
LONG hiHeight;//字体高度,4字节
LONG hiWidth;//字体宽度
LONG hiEscapement;//保留
LONG hiOrientation;//保留
LONG hiWeight;//保留
BYTE hiItalic; //保留
BYTE hiUnderline; //保留
BYTE hiStrikeOut; //保留
BYTE hiCharSet; //保留
BYTE hiOutPrecision; //保留
BYTE hiClipPrecision; //保留
BYTE hiQuality; //保留
BYTE hiPitchAndFamily; //保留
BYTE hiFaceName[32];//字体名称
}
c、文件数据(适用于ASCII、GB2312或GBK编码字库)
根据不同的区域语言(参见系统配置中查询区域语言的命令),文件数据中包含的字符不同,目前支持以下三类:
英文 支持ASCII编码,ASCII码0x00-0x79;
简体中文 支持ASCII编码、GB2312编码和GBK编码, ASCII码0x00-0x79;GB2312,高位0xA1-0xFE,低位0xA1-0xFE;GBK,高位0x81-0xFE,低位0x40-0xFE;
繁体中文 支持ASCII编码和Big5编码,ASCII码为0x00-0x79;Big5为高位0xA1-0xF9,低位0x40-7E,0xA1-0xFE;
ASCII码点阵数据高度与GB2312一致;宽度为GB2312宽度除以2所得的整数;
注:英文编码即charset = ANSI_CHARSET时,字体指定宽度为多少实际显示宽度就为多少,且字体居中显示。
字库数据存储时,按1字节的顺序存储,不存在多字节的顺序问题;见下例:
图 点阵图
如上图,为“啊”字点阵图,点阵为33*33,我们以此字举例。
假设只存储这一个字,黑色点值为0,红色点值为1;起始字节定为0字节;
如上图所示,数值按顺序存储,有如下对应关系:
0字节位7、6、5、4、3、2、1、0分别对应A1、B1、C1、D1、E1、F1、G1、H1的值;
1字节位7、6、5、4、3、2、1、0分别对应I1、J1、K1、L1、M1、N1、O1、P1的值;
2字节位7、6、5、4、3、2、1、0分别对应Q1、R1、S1、T1、U1、V1、W1、X1的值;
3字节位7、6、5、4、3、2、1、0分别对应Y1、Z1、α1、β1、γ1、δ1、ε1、ζ1的值;
4字节位7、6、5、4、3、2、1、0分别对应η1、0、0、0、0、0、0、0的值;
(注意4字节处的数值,在每一行上,不足8位的,补0,并非是接着下一行)
5字节位7、6、5、4、3、2、1、0分别对应A2、B2、C2、D2、E2、F2、G2、H2的值;
…下同….
.
这样把所有编码字符的数据连续填充,形成一个文件;