汉字点阵字库原理

 

汉字点阵字库原理

一、           汉字编码

国家标准信息交换用汉字字符集GB 2312-80共收录了汉字、图形符号等共7445个,其中汉字6763个,按照汉字使用的频度分为两级,其中一级汉字3755个,二级汉字3008个。汉字、图形符号根据其位置将其分为94个“区”,每个区包含94个汉字字符,每个汉字字符又称为“位”。其中“区”的序号由01区至94区,“位”的序号也由01位至94位。若以横向表示“位”号,纵向表示“区” 号,则“区”和“位”构成一个二维坐标。给定一个“区”值和“位”值就可以确定一个惟一的汉字或图形符号。即4位阿拉伯数字就可以惟一地确定一个汉字或符号。如“北”字的区位码是“1717”,而京字的区位码是“3009”。前两位是“区”号,后两位是“位”号。其中1至15区是各种图形符号、制表符和一些主要国家的语言字母,16区至87区是汉字,其中16区至55区是一级汉字,56至87区是二级汉字。

  UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国际汉字点阵文件和8×16的ASCII码点阵文件,HZK16中按汉字区位码从小到大依次存放国标区位码表中的所有汉字,每个汉字占用32字节,每个区为94个汉字。而asc16文件中按ascii码从小到大依次存有8×16的ASCII码点阵,每个ASCII码占用16字节。

 

1.        区位码

在国标GB2312—80中规定,所有的国标汉字及符号分配在一个94行、94列的方阵中,方阵的每一行称为一个“区”,编号为01区到94区,每一列称为一个“位”,编号为01位到94位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的“区位码”。区位码的前两位是它的区号,后两位是它的位号用区位码就可以唯一地确定一个汉字或符号,反过来说,任何一个汉字或符号也都对应着一个唯一的区位码。汉字“母”字的区位码是3624,表明它在方阵的36区24位,问号“?”的区位码为0331,则它在03区3l位。

 

2.        机内码

汉字的机内码是指在计算机中表示一个汉字的编码。机内码与区位码稍有区别。如上所述,汉字区位码的区码和位码的取值均在1~94之间,如直接用区位码作为机内码,就会与基本ASCII码混淆。为了避免机内码与基本ASCII码的冲突,需要避开基本ASCII码中的控制码(00H~1FH),还需与基本ASCII码中的字符相区别。为了实现这两点,可以先在区码和位码分别加上20H,在此基础上再加80H(此处“H”表示前两位数字为十六进制数)。经过这些处理,用机内码表示一个汉字需要占两个字节,分别 称为高位字节和低位字节,这两位字节的机内码按如下规则表示:

高位字节 = 区码 + 20H + 80H(或区码 + A0H)

低位字节 = 位码 + 20H + 80H(或位码 + AOH)

由于汉字的区码与位码的取值范围的十六进制数均为01H~5EH(即十进制的01~94),所以汉字的高位字节与低位字节的取值范围则为A1H~FEH(即十进制的161~254)。

例如,汉字“啊”的区位码为1601,区码和位码分别用十六进制表示即为1001H,它的机内码的高位字节为B0H,低位字节为A1H,机内码就是B0A1H。

 

二、           点阵字库结构

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个字节,并将每两个字节为一行打印出来,即可形成一个汉字。

点阵结构如下图所示:

 

 

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(或区码 + A0H)

机内码低位字节 = 位码 + 20H + 80H(或位码 + AOH)

反过来说,我们也可以根据机内码来获得区位码:

区码 = 机内码高位字节 - A0H

位码 = 机内码低位字节 - AOH

将这个公式与获取汉字点阵的公式进行合并计就可以得到汉字的点阵位置。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Lvgl中文点阵字库.7z是适用于使用lvgl图形库的开发者使用的中文点阵字库。该字库是经过优化和精简的,可以用于嵌入式系统中的文字显示和UI设计。它包含了常用的中文汉字、数字、英文字母和常见符号等,支持宋体和黑体两种字体。使用该字库可以让开发者在嵌入式设备上轻松实现中文显示,提升用户体验。该字库包含的字符大小和像素密度可以根据需求进行自定义,支持灵活的大小和颜色选择。此外,Lvgl中文点阵字库.7z也提供了一些示例代码,方便开发者参考使用。总的来说,Lvgl中文点阵字库.7z是一个实用的中文点阵字库,可以为嵌入式开发者带来便利,提升应用质量和用户满意度。 ### 回答2: LVGL是一套开源的GUI框架,用于嵌入式设备中。中文点阵字库是LVGL中可用的一种字体资源,可以启用中文界面元素的渲染,如中文字符和汉字。这个字库资源包可以从csdn上下载,下载链接为“lvgl中文点阵字库.7z”,需要解压缩后使用。 这个字库包含了常用的中文汉字、英文字母、数字等。它们已经被转换成了点阵格式,并编码成UTF-8字符串。使用LVGL框架的用户可以直接加载字库,然后根据需要使用中文字符串渲染组件,如按钮、标签等。 中文点阵字库虽然能够在嵌入式设备中提供丰富的界面展示效果,但是需要注意的是,它将占用一定的存储空间。因此在设备内存存储空间有限的情况下,需要权衡存储资源和界面展示效果之间的平衡。此外,中文字符的渲染可能会影响内存和CPU的使用效率,因此也需要在实际应用中进行测试和优化。 总体来说,LVGL中文点阵字库是一个方便实用的资源包,可以使嵌入式设备的界面展示更加多样化和丰富化,为应用开发者提供了更多的选择与定制化能力。 ### 回答3: lvgl中文点阵字库.7z是一个包含中文点阵字库的压缩包,可以用于LVGL开发人员的使用。该压缩包是在CSDN上发布的,目的是为了方便有需要的开发者进行下载和使用。 LVGL是一个开源的GUI库,主要用于嵌入式系统的图形界面设计,在许多嵌入式系统中都有广泛的应用。中文点阵字库是其中一个重要的组成部分,可以用于显示中文字符,给用户带来更好的使用体验。 该压缩包包含了多种中文字库,可以根据需要选择合适的字体。需要使用该字库的开发人员只需要下载解压缩包,将字库文件加入到自己的工程中即可使用。 总之,LVGL中文点阵字库.7z十分实用,对于需要在LVGL中使用中文的开发人员来说,是一个非常方便和实用的资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值