8x8点阵字模生成查询_简析点阵字库的相关知识

57b5b549dd6281232304c99e570e0395.gif

点阵字库的生产原理

所有的汉字或者英文都是下面的原理,由左至右,每8个点占用一个字节,最后不足8个字节的占用一个字节,而且从最高位向最低位排列。

生成的字库说明:(以12×12例子)

3bf89ed1be1486cc4ded627330281f1b.png

一个汉字占用字节数:12&pide;8=1····4也就是占用了2×12=24个字节。

编码排序A0A0→A0FE A1A0→A2FE依次排列。

以12×12字库的“我”为例:“我”的编码为CED2,所以在汉字排在CEH-AOH=2EH区的D2H-A0H=32H个。所以在12×12字库的起始位置就是[{FE-A0}*2EH+32H]*24=104976开始的24个字节就是我的点阵模。

其他的类推即可。

英文点阵也是如此推理。

在DOS程序中使用点阵字库的方法

首先需要理解的是点阵字库是一个数据文件,在这个数据文件里面保存了所有文字的点阵数据。至于什么是点阵,我想我不讲大家都知道 的,使用过"文曲星"之类的电子辞典吧,那个的液晶显示器上面显示的汉子就能够明显的看出"点阵"的痕迹。在 PC 机上也是如此,文字也是由点阵来组成了,不同的是,PC机显示器的显示分辨率更高,高到了我们肉眼无法区分的地步,因此"点阵"的痕迹也就不那么明显了。

点阵、矩阵、位图这三个概念在本质上是有联系的,从某种程度上来讲,这三个就是同义词。点阵从本质上讲就是单色位图,他使用一个比特来表示一个点,如果这 个比特为0,表示某个位置没有点,如果为1表示某个位置有点。矩阵和位图有着密不可分的联系,矩阵其实是位图的数学抽象,是一个二维的阵列。位图就是这种 二维的阵列,这个阵列中的 (x,y) 位置上的数据代表的就是对原始图形进行采样量化后的颜色值。但是,另一方面,我们要面对的问题是,计算机中数据的存放都是一维的,线性的。因此,我们需要 将二维的数据线性化到一维里面去。通常的做法就是将二维数据按行顺序的存放,这样就线性化到了一维。

那么点阵字的数据存放细节到底是怎么样的呢。其实也十分的简单,举个例子最能说明问题。比如说 16*16 的点阵,也就是说每一行有16个点,由于一个点使用一个比特来表示,如果这个比特的值为1,则表示这个位置有点,如果这个比特的值为0,则表示这个位置没 有点,那么一行也就需要16个比特,而8个比特就是一个字节,也就是说,这个点阵中,一行的数据需要两个字节来存放。第一行的前八个点的数据存放在点阵数 据的第一个字节里面,第一行的后面八个点的数据存放在点阵数据的第二个字节里面,第二行的前八个点的数据存放在点阵数据的第三个字节里面,…,然后后 面的就以此类推了。这样我们可以计算出存放一个点阵总共需要32个字节。看看下面这个图形化的例子:

| |1| | | | | | | | | | |1| | | |

| | |1|1| |1|1|1|1|1|1|1|1|1| | |

| | | |1| | | | | | | | |1| | | |

|1| | | | | |1| | | | | |1| | | |

| |1|1| | | |1| | | | | |1| | | |

| | |1| | | |1| | | | |1| | | | |

| | | | |1| | |1| | | |1| | | | |

| | | |1| | | |1| | |1| | | | | |

| | |1| | | | | |1| |1| | | | | |

|1|1|1| | | | | | |1| | | | | | |

| | |1| | | | | |1| |1| | | | | |

| | |1| | | | |1| | | |1| | | | |

| | |1| | | |1| | | | | |1| | | |

| | |1| | |1| | | | | | |1|1|1| |

| | | | |1| | | | | | | | |1| | |

| | | | | | | | | | | | | | | | |

可以看出这是一个"汉"字的点阵,当然文本的方式效果不是很好。根据上面的原则,我们可以写出这个点阵的点阵数 据:0x40,0x08,0x37,0xfc,0x10,0x08,…, 当然写这个确实很麻烦所以我不再继续下去。我这样做,也只是为了向你说明,在点阵字库中,每一个点阵的数据就是按照这种方式存放的。

当然也存在着不规则的点阵,这里说的不规则,指的是点阵的宽度不是8的倍数,比如 12*12 的点阵,那么这样的点阵数据又是如何存放的呢?其实也很简单,每一行的前面8个点存放在一个字节里面,每一行的剩下的4点就使用一个字节来存放,也就是说 剩下的4个点将占用一个字节的高4位,而这个字节的低4位没有使用,全部都默认的为零。这样做当然显得有点浪费,不过却能够便于我们进行存放和寻址。对于 其他不规则的点阵,也是按照这个原则进行处理的。这样我们可以得出一个 m*n 的点阵所占用的字节数为 (m+7)/8*n.

在明白了以上所讲的以后,我们可以写出一个显示一个任意大小的点阵字模的函数,这个函数的功能是输出一个宽度

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值