阅读( 224 ) 我要纠错

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、文件数据(适用于ASCIIGB2312GBK编码字库)

根据不同的区域语言(参见系统配置中查询区域语言的命令),文件数据中包含的字符不同,目前支持以下三类:

英文 支持ASCII编码,ASCII0x00-0x79

简体中文  支持ASCII编码、GB2312编码和GBK编码, ASCII0x00-0x79GB2312,高位0xA1-0xFE,低位0xA1-0xFEGBK,高位0x81-0xFE,低位0x40-0xFE

繁体中文  支持ASCII编码和Big5编码,ASCII码为0x00-0x79Big5为高位0xA1-0xF9,低位0x40-7E0xA1-0xFE

ASCII码点阵数据高度与GB2312一致;宽度为GB2312宽度除以2所得的整数;

注:英文编码即charset = ANSI_CHARSET时,字体指定宽度为多少实际显示宽度就为多少,且字体居中显示。

字库数据存储时,按1字节的顺序存储,不存在多字节的顺序问题;见下例:

9.3.png


 

点阵图

如上图,为“啊”字点阵图,点阵为33*33,我们以此字举例。

假设只存储这一个字,黑色点值为0,红色点值为1;起始字节定为0字节;

如上图所示,数值按顺序存储,有如下对应关系:

0字节位76543210分别对应A1B1C1D1E1F1G1H1的值;

1字节位76543210分别对应I1J1K1L1M1N1O1P1的值;

2字节位76543210分别对应Q1R1S1T1U1V1W1X1的值;

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字节位76543210分别对应A2B2C2D2E2F2G2H2的值;

下同.

.

这样把所有编码字符的数据连续填充,形成一个文件;


×