点阵汉字的原理及应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

点阵汉字原理与应用

一.汉字的编码

由于在电脑中,所有的数据都是以0和1保存的。因此,想要用计算机来显示汉字前提就是要将汉字以二进制,即0和1形式进行编码。

GBK内码

在英文的显示操作中,一个字母、数字及字符均由1个ASCII码表示,并且由于英文字符种类相对较少,故其ASCII码是小于等于127的。而汉字由于种类繁多,每个汉字有2个ASCII码构成,这两个ASCII码称为汉字的GBK内码,通常用十六进制表示。例如,“啊”的GBK内码=B0 A1。汉字的GBK内码一定大于A0H,即160,目的是为了防止与英文的ASCII码产生冲突。

区位码

为了使每一个汉字有一个全国统一的代码,1980年,我国颁布了第一个汉字编码的国家标准:GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。由于国标码是四位十六进制,如汉字的GBK内码,为了便于交流,大家常用的是四位十进制的区位码。所有的国标汉字与符号组成一个94×94的矩阵(见图1所示)。在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的"区位码"。区位码和GBK内码之间可以相互转换,区位码=GBK内码-A0H。例如:“啊”的GBK内码=B0 A1,则其区码=B0-A0=10H=16,而其位码=A1-A0=01,所以“啊”的区位码=16 01,为4位十进制码。

在区位码中,01-09区为682个特殊字符,16~87区为汉字区,包含6763个汉字。其中16-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。因此利用区位码便可实现对6000多个汉字的提取。

图1汉字的区位码表

二、点阵字库结构

点阵字库储存

在汉字的点阵字库中,每个字节的每个位都代表一个汉字的一个点,每个汉字都是由一个矩形的点阵组成,0代表没有,1代表有,将0和1分别用不同颜色画出就形成了一个汉字。常用的点阵矩阵有12*12,14*14,16*16三种字库。

16*16点阵字库(见图2所示)

对于16*16的矩阵来说,它所需要的位数共是16*16=256位,每个字节为8位,因此每个汉字都要用256/8=32个字节来表示。即每两个字节代表一行的16个点,共需16行(见图3所示)。

图2 16*16点阵字库(部分)

图3 汉字“中”16*16点阵示意

14*14与12*12点阵字库

对于14*14和12*12的字库,理论上计算,它们所需要的点阵分别为(14*14/8)=25,(12*12/4)=18个字节,但是,如果按照这种方式来储存,那么取点阵和显示时,由于每一行都不是8的整数倍就会涉及到点阵的计算处理问题,会增加程序的复杂度,降低程序的效率。

为了解决这个问题,有些点阵字库会将14*14和12*12的字库按16*14和16*12来存储,即,每行还是按两个字节来存储,但是14*14的字库,每两字节的最后4位是没有使用,这个根据不同的字库会有不同的处理方式,所以在使用字库时要注意这个问题,特别是14*14的字库。

二、点阵汉字的获取

利用区位码获取汉字

汉字的点阵字库是根据区位码的顺序进行储存的,因此我们可以根据区位码来获得一个字库的点阵。计算公式如下:

点阵起始位置=((区码-1)*94+(位码-1))*汉字点阵字节数

对于16*16点阵字库,公式即为:

点阵起始位置=((区码-1)*94+(位码-1))*32

获取点阵起始位置后就可以从这个位置开始读取出一个汉字的点阵。

利用GBK内码获取汉字

由于区位码和汉字的内码可以相互转换,自然也可以用GBK内码来获取汉字。三、利用010Editor及画图工具详细演示汉字“点”的点阵过程

1、获取“点”字的GBK内码

新建一个文本文档,输入“点”字,保存。然后用十六进制编辑器010Editor打开该文本文档(见图4所示),得到汉字“点”的GBK内码为B5 E3。

图4 汉字“点”GBK内码

2、在16*16点阵字库中获取汉字“点”

“点“字的区码=B5-A0=15H=21:;”点“字的位码=E3-A0=43H=67。从而“点”字在字库中的起始位置=((21-1)*94+(67-1))*32=62272=F340H。用010Editor查看16*16点阵字库,按住键盘ctrl+g,输入F340,定位到此处。选中当前一行及下一行,选菜单edit---copy as---copy as hex text,粘贴到文本文件中,得到“点”的点阵数据(见图5所示)。

图5 汉字“点”的点阵数据获取

3、在16*16表格中点阵汉字“点”

得到汉字“点”的点阵数据如下:

02 00 02 00 02 08 03 FC 02 00 02 10 3F F8 20 10

20 10 20 10 3F F0 00 00 29 10 24 C8 44 44 80 04

每两个字节可以确定一行,用画图工具制作16*16表格,将上述十六进制点阵数据转化为二进制后即可描出该字的笔画。例如以两个字节为一组,第一组十六进制数02 00转化为二进制为0000 0010 0000 0000,则第一行只需将第七个方格涂黑;第四组十六进制数03 FC转化为二进制为0000 0011 1111 1100,则第四行需将第7--14个方格均涂黑。(见图6所示)

图6 汉字“点”点阵过程示意

按照相同方法可完成“点”字的点阵(见图7所示)。

图7点阵汉字“点”

相关文档
最新文档