中文点阵字库的使用方法
在嵌入式设备LCD上显示的汉字大多数都属于点阵汉字。常用的点阵字库来自UCDOS。大家可以去网上下载一个UCDOS的完全安装版本,里面可以找到很多点阵字库文件。下面几个字库文件是常用的:
HZK12 : 12点阵汉字库(宽度x高度 = 12x12)
ASC12 : 12点阵ASCII字库(宽度x高度 = 6x12)
HZK16 : 16点阵汉字库(宽度x高度 = 16x16) 最常用的中文字库
ASC16 : 16点阵ASCII字库(宽度x高度 = 8x16)最常用的ASCII字库
HZK24 : 24点阵汉字库(宽度x高度 = 24x24)票据打印机用得较多
UCDOS的字库排列标准符合国标一、二级字库标准,即GB2312,汉字个数为6000多个。按照汉语拼音顺序排列,前面一部分是一级常用汉字大约2000多个,后面一部分是二级汉字大约4000多个。
大多数情况下,一二级字库就可以满足我们的需求。但是在某些特殊应用(比如显示每个人的姓名)中可能需要用到GB18030字库,该字库除了包括一、二级字库外还包含很多不常用的汉字,总汉字个数为27538个。
下面是GB18030字库点阵的截图。
这个放大的汉字就是二级字库中最后一个汉字,这个字后面的汉字就属于GB18030特有的汉字了。估计大多数人一个都不认识。
我们来看看GB18030字库最后区域的汉字长得啥样子。
汉字点阵在汉字库中的地址计算公式
汉字库种类繁多,但都是按照区位的顺序排列的。前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。
计算公式为: (94*(区号-1)+位号-1) * 一个汉字字模占用字节数
对于16点阵的字库,1个汉字字模占用32字节。对于12点阵字库,字摸每行的位数均补齐为8的整数倍,于是实际该字库的位长度是16*12,即占用24字节。
我们在计算机中常用的汉字编码为汉字内码,不是区位码,需要进行转换。因此最终的计算公式为:
ADDRESS = [(内码1-0xa1) * 94 + (内码2-0xa1)] * 32
这个计算结果是相对全角空格字符的相对地址。
16点阵的数据格式
汉字的字型可由其点阵数据来表示。每个字型的点阵数据为16×16(横行点数×纵列点数),共256个二进制位,32个字节。
汉字16点阵字型数据的32个字节排列次序是以0字节开始到31字节结束,均用十六进制表示,其记录格式如下:
举个具体的例子,大家一看就懂。
“啊”是汉字区第1个汉字,对应的数据为:
0x00,0x00,0x0E,0xFC,0xEA,0x08,0xAA,0x08,
0xAA,0xE8,0xAA,0xA8,0xAC,0xA8,0xAA,0xA8,
0xAA,0xA8,0xAA,0xA8,0xEA,0xE8,0xAA,0xA8,
0x0C,0x08,0x08,0x08,0x08,0x28,0x08,0x10,
大家明白了点阵字库的排列原理,编程实现汉字显示就比较容易了。
下面再推荐给大家一个非常好用的工具,专门用于查看和分析国标点阵字库的软件。
这个程序仅支持8个字符的文件名,要求文件名的最后4位数字表示点阵的大小。
比如我们要分析HZK16 文件,可以将文件名修改HZKs1616.hz,然后用FONTSHOW.exe程序打开。