点阵字库应用原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
点阵字库[浏览次数:492次]
点阵字库是把每一个汉字都分成16X16或24X24个点,然后用每个点的虚实来表示汉
字的轮廓,常用来作为显示字库使用,这类点阵字库汉字最大的缺点是不能放大,一旦放大后就会发现文字边缘的锯齿。
目录
点阵字库的显示原理
点阵字库与字符字模
点阵字库结构
汉字点阵获取
在DOS程序中使用点阵字库的方法
点阵字库和矢量字库的差别
如何使用Windows的系统字库生成点阵字库
标准点阵字库芯片
点阵字库的显示原理
* 所有的汉字或者英文都是下面的原理,
由左至右,每8个点占用一个字节,最后不足8个字节的占用一个字节,而且从最
高位向最低位排列。
生成的字库说明:(以12 X12例子)
一个汉字占用字节数:12- 8=1 • -4也就是占用了2X 12= 24个字节。
编码排序AOAO T AOFE A1A0 宀A2FE依次排列。
以12X 12字库的我”为例:我”的编码为CED2,所以在汉字排在
CEH-AOH=2EH 区的D2H -A0H=32H 个。所以在12 X12字库的起始位置就是
[{FE-A0}*2EH+32H]*24= 10 4976开始的24个字节就是我的点阵模。
其他的类推即可。
英文点阵也是如此推理。
点阵字库与字符字模
« 在dos终端模式下是不可以显示中文汉字的,只能显示英文。
汉字与英文的区别是:
1.汉字字库中,任何字符均用2个字节编码,即区码和位码,在英文字库中,
所有字符均用单字节编码。
2.16点阵汉字字库(16*16)用32个字节存储一个字符的字模,16点阵英文字库
(8*16)用16个字节存储单个字符的字模。
在DOS终端模式下用的是16点阵英文字库,如果要让DOS终端中显示中文,可以改写终端模式下的16点阵英文字库,使其显示的不是原有的英文字符,而是汉字字符,当然也可以加入自造点阵图形图像。原理为:
我们输入AB,正常显示的是AB,但如果改变AB的字模,用汉字的字模代替,这样输入AB字符,并不显示AB,而是显示一个汉字。将一个汉字从中间劈为两半,左面部分顶替A 的字模,右面部分顶替B的字模。
dos所用字库,文件头结构很简单,如默认的8*16英文字库,文件头长度为4,跳过这四个字节就是字模数据;也有没有文件头的,从第一个字节开始就是字
模数据。
点阵字库结构
* 1、点阵字库存储
在汉字的点阵字库中,每个字节的每个位都代表一个汉字的一个点,每个汉字都是
由一个矩形的点阵组成,0代表没有,1代表有点,将0和1分别用不同颜色画出,就形成了一个汉字,常用的点阵矩阵有12*12, 14*14, 16*16 三种字库。
字库根据字节所表示点的不同有分为横向矩阵和纵向矩阵,目前多数的字库都
是横向矩阵的存储方式(用得最多的应该是早期UCDOS字库),纵向矩阵一般是因为有某些液晶是采用纵向扫描显示法,为了提高显示速度,于是便把字库矩阵做成纵向,省得在显示
时还要做矩阵转换。我们接下去所描述的都是指横向矩阵字库。
2、16*16 点阵字库
对于16*16 的矩阵来说,它所需要的位数共是16*16 = 256个位,每个字节为8位,因此,每个汉字都需要用256/8=32 个字节来表示。
即每两个字节代表一行的16个点,共需要16行,显示汉字时,只需一次性读取32个字节,并将每两个字节为一行打印出来,即可形成一个汉字。
点阵结构如下图所示:
第一字节第二字节
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
1
2
3
4
5
6
7
8
9
10
12
13
14
15
3、14*14 与12*12 点阵字库
对于14*14 和12*12 的字库,理论上计算,它们所需要的点阵分别为
(14*14/8)=25, (12*12/8)=18 个字节,但是,如果按这种方式来存储,那么取
点阵和显示时,由于它们每一行都不是8的整位数,因此,就会涉到点阵的计算处
理问题,会增加程序的复杂度,降低程序的效率。
为了解决这个问题,有些点阵字库会将14*14 和12*12 的字库按16*14 和16*12 来存储,即,每行还是按两个字节来存储,但是14*14的字库,每两个字
节的最后两位是没有使用,12*12的字节,每两字节的最后4位是没有使用,这个根据不同的字库会有不同的处理方式,所以在使用字库时要注意这个问题,特别是
14*14 的字库。
汉字点阵获取
* 1、利用区位码获取汉字
汉字点阵字库是根据区位码的顺序进行存储的,因此,我们可以根据区位来获取一
个字库的点阵,它的计算公式如下:
点阵起始位置=((区码-1)*94 + ( 位码-1)) * 汉字点阵字节数
获取点阵起始位置后,我们就可以从这个位置开始,读取出一个汉字的点阵。
2、利用汉字机内码获取汉字
前面我们己经讲过,汉字的区位码和机内码的关系如下:
机内码低位字节= 位码+ 20H + 80H(或位码+ AOH)
反过来说,我们也可以根据机内码来获得区位码:
区码=机内码高位字节-A0H
位码=机内码低位字节-AOH
将这个公式与获取汉字点阵的公式进行合并计就可以得到汉字的点阵位置。
在DOS程序中使用点阵字库的方法
・首先需要理解的是点阵字库是一个数据文件,在这个数据文件里面保存了所有文字的点阵数据•至于什么是点阵,我想我不讲大家都知道的,使用过”文曲星"
之类的电子辞典吧,那个的液晶显示器上面显示的汉子就能够明显的看出”点阵”的
痕迹.在PC机上也是如此,文字也是由点阵来组成了,不同的是,PC机显示器的显示分辨率
更高,高到了我们肉眼无法区分的地步,因此”点阵”的痕迹也就不那么明显了。
点阵、矩阵、位图这三个概念在本质上是有联系的,从某种程度上来讲,这三个就是
同义词.点阵从本质上讲就是单色位图,他使用一个比特来表示一个点,如果这个比
特为0,表示某个位置没有点,如果为1表示某个位置有点•矩阵和位图有着密不可分的联
系,矩阵其实是位图的数学抽象,是一个二维的阵列•位图就是这种二维的阵列,这个阵列中的(x,y)位置上的数据代表的就是对原始图形进行采样量化后的颜色值.但是,另一方面,
我们要面对的问题是,计算机中数据的存放都是一维的,线性的•
因此,我们需要将二维的数据线性化到一维里面去•通常的做法就是将二维数据按
行顺序的存放,这样就线性化到了一维。
那么点阵字的数据存放细节到底是怎么样的呢•其实也十分的简单,举个例子最能说明问题•比如说16*16 的点阵也就是说每一行有16个点,由于一个点使用一个比特来表示,如果这个比特的值为1,则表示这个位置有点,如果这个比特的值为0,则表示这个位置没有点,那么一行也就需要16个比特,而8个比特就是一个字节,
也就是说,这个点阵中,一行的数据需要两个字节来存放•第一行的前八个点的数据存
放在点阵数据的第一个字节里面,第一行的后面八个点的数据存放在点阵数据的第