汉字字模提取论文.docx
《汉字字模提取论文.docx》由会员分享,可在线阅读,更多相关《汉字字模提取论文.docx(27页珍藏版)》请在冰豆网上搜索。
![汉字字模提取论文.docx](https://file1.bdocx.com/fileroot1/2023-2/25/e2bd51f9-ce25-4a0b-ad6e-3a4a43eb4243/e2bd51f9-ce25-4a0b-ad6e-3a4a43eb42431.gif)
汉字字模提取论文
汉字字模提取的研究与实现
罗飞夺
摘要
在显示技术日新月异的今天,越来越多的场合需要利用到在无操作系统的小应用系统中显示汉字。
如火车站的车次信息显示、赛场上的比分赛况显示等。
汉字显示是在只有西文操作系统的情况下,以及一些无操作系统的小应用系统中,需要经常用到的技术。
如何得到汉字的字模,是汉字显示技术中首先必须解决的问题。
在许多工程控制和字符串处理的环境中,汉字字符的处理仍然有别于西文字符的处理,需要加以专门的考虑。
针对这一现状,笔者设计开发了“汉字字模提取软件”。
本软件的开发,使用的工具是MicrosoftVisualBasic。
本软件的主要功能,是实现汉字字模的提取,亦可通过该软件,改变所需的字体,保存需要的字模。
本文主要介绍了点阵汉字提取的原理与方法。
关键词:
汉字字模提取
Abstract
Today,themanifestationtechniqueisalteringfromdaytoday;moreandmoreoccasionmustmanifestthecharactersinthesmallappliedsystemsthathavenooperatesystem.Forexample,thetrainstationsshowtheinformationofthetrain,andtheSurpassfieldsshowtheinformationofthegameinformation.TheChinesecharactersmanifestationisundertheconditionofonlyhavingtheoperatesystemofEnglish,andinsomesmallappliedsystemsthathavenooperatesystem,thetechniquesthatneedtobeuseusually,howtogetthetypematrixoftheChinesecharactersistheinitialthingintheChinesecharactersmanifestationtechniqueofproblem.Intheenvironmentofmanyengineeringcontrolsandthestringprocessing,theprocessingoftheChinesecharactersstillhasdifferencebetweentheprocessingofthecharacterofEnglishcharacters.Itneedstobetakenintothespecializedconsideration.Tofacethecurrentsituation,thewriterdesignedanddevelopedthesoftwareofgettingthetypematrixoftheChinesecharacter.
Todevelopthesoftware,thewriterusedtheMicrosoftVisualBasic.
Themainfunctionofthesoftware,istogetthetypematrixoftheChinesecharacters.Andwecanalsochangethefontorsavethetypematrixifyouneed.
Thispapermainlyintroducestheprincipleandapproachofextractingdotcharacter.
KeyWordsChinesecharacter;dotcharactermodel;extract.
第一章引言
1.1编写目的
随着科学技术的不断发展,不断提高,计算机科学日渐成熟,它已经进入人类社会的各个领域并发挥着越来越重要的作用。
在这个日新月异的信息时代,信息技术的发展更是迅猛,传统的黑板、报纸等媒介,已经不能满足大量实时信息的管理和即时发布。
因此,使用汉字字模提取软件,对各类信息的发布和管理,具有手工发布管理无法比拟的优点:
方便、迅速、实时、准确、可靠、价廉。
1.2背景
车站、机场、商场、厂矿企业及其他一些公共场所,经常需要发布多变的实时的信息或进行广告宣传,传统的黑板和纸张等为媒介的手段不能满足其多变性和实时性。
LED电子显示屏以其修改方便、实时显示、美观整洁等特点应运而生。
而随着单片机和嵌入式技术的快速发展和应用,越来越多的仪器设备、智能装置具有一个液晶显示模块用于显示操作菜单、数据和工作状态等。
在显示技术日益发展的今天,汉字点阵文件显示技术已经成熟,在工业生产和日常生活中,LED点阵屏和LCD点阵式液晶显示屏的应用越来越广泛,如设备的操作显示屏、火车站的旅客向导显示屏、手机的显示屏以及大型广告显示屏等等。
然而无论是LED点阵屏还是LCD点阵式液晶显示屏,要在没有操作系统的单片机系统上显示汉字,都需要获得待显示汉字的点阵字模,只有预先提取每个要显示的汉字的字模以点阵方式来显示,再由单片机控制系统进行处理。
获取字模的最原始的方法是手工方法,这种方法不仅工作量大、效率低,而且容易出错;而在单片机控制的标语指示、车站机场车次航线显示、银行汇率显示等系统中,使用昂贵的通用汉字字库芯片并不经济。
因此,可以利用计算机的汉字库文件,直接调用汉字库文件,然后提取字符字模。
这样,不仅提高了工作效率,减少了工作量,还节约了硬件开支。
所以,在显示技术日新月异的今天,研究汉字字模提取的方法与技术,具有一定的现实意义和时代意义。
第二章汉字字模提取简介
2.1汉字字库的介绍
汉字字库,根据存储的汉字的信息的不同,可以分为点阵字库、矢量字库、曲线轮廓字库等。
又根据汉字字体的不同,每一种字库又可分为宋体、楷书、隶书、黑体等等。
在点阵字库中,存放着汉字的点阵字模信息。
它根据点阵的字模大小,可以分为16*16点阵字库,24*24点阵字库等。
当汉字的点阵数目增加时,其显示的质量就越高,相对的,它所占用的空间也就越大。
在同一点阵字库中,各汉字字模信息所占的存储空间相同,所以,查询和提取非常方便。
在矢量字库和曲线轮廓字库中,则存放各汉字的索引表及其比划或字型等信息。
不管是点阵汉字、矢量汉字、曲线轮廓汉字,要显示这些汉字,最终,都必须要提取它们的点阵字模信息。
2.2字模提取的介绍
一个汉字,可以看成是由许多点阵排列出来的,汉字笔画划过的地方为“1”,其余的地方为“0”(如图2.1所示),然后把这些点阵信息按一定顺序排列,就是这个汉字的字模了。
要显示一个汉字,就必须要知道这个字模的点阵字模信息。
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
●
●
○
○
○
○
○
○
○
○
○
○
○
●
●
●
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
●
○
○
○
○
○
○
○
○
○
○
○
●
●
●
●
●
●
●
●
●
○
○
○
○
○
○
○
○
○
○
●
●
●
○
○
○
○
○
○
○
○
○
○
○
○
●
○
●
○
●
○
○
○
○
○
○
○
○
○
○
●
○
○
●
○
○
●
○
○
○
○
○
○
○
●
●
○
○
○
●
○
○
○
●
●
○
○
○
○
○
○
○
○
●
●
●
●
●
○
○
○
○
○
○
○
○
○
○
○
○
●
○
●
○
○
○
○
○
○
○
○
○
○
○
○
●
○
●
●
●
●
○
○
○
○
○
○
○
○
○
●
○
○
○
○
○
●
○
○
○
○
○
○
○
○
●
○
○
○
○
●
○
●
○
○
○
○
○
○
○
●
○
○
○
○
○
○
●
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
图2.1
我国国标(GB2312-80)规定,汉字用内码表示,内码为两个字节。
并且,两个字节的最高位均为1。
同时,国标对汉字库也做了统一的规定,将汉字库分为若干个区,每个区均有94个汉字,每个汉字均有一个唯一的确定的区码和位码。
当我们知道了一个汉字的区位码,也就相当于知道了该汉字在字库中的位置。
由于汉字的机内码和区位码有一定的关系,通过汉字的机内码就可以得到汉字的区位码,从而,也就可以提取出该汉字的字模。
第三章字模提取总体设计
3.1设计的目标
本次设计利用MicrosoftVisualBasic平台。
利用其界面设计的简易性,以达到本次毕业设计所需的目标:
1、通过输入汉字,能够提取所需的汉字的字模;
2、能够自动显示点阵情况下的汉字;
3、可以改变所需的汉字的字体,包括字型、字号等;
4、可以保存汉字转换的结果。
3.2汉字字模提取的基本原理
如同画点画线一样,汉字是经过电脑画出来的。
这样,就必须为每一个字准备一个数组,这就是“字模”。
这些字模分为点阵和矢量两种。
我们常用的是点阵字模,一般有16*16和24*24两种,分别称为16点阵字和24点阵字。
它们的原理是依据点阵中的0和1来把汉字画出来(即0表示不画点,1表示画点)。
本文主要介绍点阵字模的获取。
当然,我们不能为所用到的每一个汉字去自己编写它们的字模。
我们只是设法将大汉字库中所需要的汉字字模取出来,建立我们自己的字库。
这样的字库可以使得汉字的显示更快,且只需要很小的存储空间。
UC-DOS为我们提供了大多数汉字的16点阵和24点阵的字库。
本文以16点阵的汉字显示为例,因此,取用UC-DOS中的字库文件HZK16oHZK16的内容是按照字节存放的,即把16*16个“位”变成32个“字节”来存放。
另外,汉字点阵字模代码是按照区位码的顺序在汉字库中存放的;而系统内部处理和存储汉字使用的是机内码。
因此,必须了解区位码和机内码的关系。
国内的汉字系统一般都是采用国标码最高位置1作为汉字的机内码。
国标码由2个字节组成,其中高字节表征区,低字节表征位。
国标码和区位码都有94个区,每个区又都有94个位。
国标码和区位码的关系是:
国标码高字节=区码十20H
国标码低字节=位码十20H
因此,汉字的机内码与国标码和区位码的关系是:
机内码高字节=国标码高字节+80H=区码十AOH
机内码低字节=国标码低字节+80H=区码十AOH
综上所述,通过汉字的机内码就可以获得汉字的区位码,从而知道汉字在字库中存放的位置。
现在,给出读取汉字字模的基本步骤:
①获取汉字的机内码;
②通过汉字的机内码推算出区位码;
③由区位码计算出汉字在字库中的位置offset:
offset=[(区码一1)*94+(位码一l)]*32
④从该偏移地址读取32个字节,就是相关汉字的点阵字模代码。
(引用:
王保华著《利用VC++实现汉字字模提取与小汉字库的生成》)
3.3软件的开发环境
3.3.1Windows下的VisualBasic编程环境
BASIC语言自诞生以来,在广泛的应用中不断地发展。
至今为止,BASIC语言已经经历了四个发展阶段:
第一代:
早期的BASIC(20世纪60年代中期到70年代中期);
第二代:
微机出现初期的BASIC(20世纪70年代中期到80年代中期),其代表为GW-BASIC和Microsoft的BASIC;
第三代:
结构化的BASIC语言,其代表为TrueBASIC,QuickBASIC,TurboBASIC,QBASIC;
第四代:
VisualBASIC。
前三代的BASIC语言,尽管功能不断丰富,但都是在DOS操作环境下使用的,它提供给用户的是字符界面,看起来单调枯燥。
例如,向计算机输入两个数a和b,要求计算机输出a+b的值c,用传统的BASIC语言编写的程序如下:
10INPUT“entera:
”,a
20INPUT“enterb:
”,b
30c=a+b
40PRINT“c=”,c
50END
运行时,在输入a和b的值后,按回车键,屏幕上会有提示的方式来显示计算的结果。
对于每一个使用过Windows的人来说,显然会对这种人机对话的方式感到相当不适应。
Windows提供的是图形界面,使用户能够在生动活泼的环境下愉快地进行学习和工作。
在Windows环境下,用户只需要移动鼠标,单击一些按钮,或者选择菜单中的某些命令就可以实现某些操作(而不用像在DOS环境中那样,必须给出一系列复杂的命令)。
那么,怎么样才能开发出这种适用于Windows环境的应用程序呢?
Microsoft于1991年推出了VisualBasic1.0版本,因其简单易学,在短时间内,一大批的程序员很快就能掌握了VisualBasic,并用它来编写出各种各样的Windows应用程序,使BASIC的编程走出了“Helloworld”时代。
在Windows环境下,用户只需要移动鼠标,单击一些按钮,或者选择菜单中的某些命令来实现某些操作,在程序运行过程中,还会出现“对话框”,引导用户进行某些选择或操作。
熟悉Windows的用户对次深有感触。
MicrosoftVisualBasic6.0是Windows应用程序开发工具,是目前普遍广泛的、易学易用的面向对象的编程工具。
VisualBasic提供了大量的ACTIVE控件,这些控件可用于设计界面,并实现各种功能,大大减少了编程人员的工作量,也简化了界面设计过程,从而有效地提供了应用程序的运行效率和可靠性。
故而,开发设计本软件,VB是一个相对比较好的选择。
3.3.2面向对象的编程
在面向对象的程序设计中,“对象”是系统中的基本运行实体,它封装了数据和操作。
对象的性质和状态特征称为“属性”,同类型的对象具有相同的属性。
当要特制某一具体的对象时,这些属性就有了具体的值。
不同对象的不同属性值描述了对象的特征。
这些值就是对象的数据。
同类对象的抽象称为“类”。
对象不会无缘无故地执行某个操作,只有在接受别的对象请求时,才会进行某一操作。
这种请求对象执行某一操作或回答某些信息的要求称为“消息”或“事件”。
对象接到消息所执行的程序称为事件驱动程序。
VB的事件驱动程序都表示为“过程”。
事件驱动过程可以包括对象的调用和各种VB语言的语句。
VB的工具箱为程序员提供了一套界面设计常用的对象模子类,它们的属性没有具体值。
当我们把工具箱的某个工具“拖动”或双击到窗体上时,系统以这个模子的形式赋予它各种初始值,构造了一个实在对象。
这些属性值可以由用户修改。
VB不仅为用户提供了一套标准控件工具,还允许程序员添加新的控件工具以及用VB程序设计语言设计对象。
3.3.3VB在汉字字模提取软件中的应用
3.3.3.1创建应用程序的主要步骤
1、创建应用程序的界面
界面是用户和程序交互的桥梁,用VB创建的标准的Windows应用程序的界面一般由窗体和按钮、菜单、文本框和图像框等构成。
根据程序的功能要求和用户与程序之间的信息交流的需要,来确定需要哪些对象,规划界面的布局。
2、设置界面上各个对象的属性
根据规划的界面要求设置各个对象的属性,比如对象的面貌、名称、颜色、大小等。
大多数属性取值既可以在设计时通过窗口设定,也可以在程序代码中通过编程在程序运行时设置修改。
3、编写程序响应的程序代码
界面仅仅决定了程序的外观,设计完界面后,就要通过“代码编辑器”窗口来添加代码,实现一些在接受外界信息后得到的响应、信息处理等任务。
4、保存工程
一个VB程序就是一个工程,在设计一个应用程序时,系统会建立一个扩展名为.vbp的工程文件,工程文件包含了该工程所建立的所有文件的相关信息,保存工程就同时保存了该工程的所有相关文件。
比如,当设计界面时产生的窗体保存在扩展名为.frm和.frx的窗体文件中。
在打开一个工程时,在工程中的所有相关文件同时被装载。
5、运行和调试程序
通过“运行”菜单中的选项来运行程序,当程序出现错误时,VB系统可提供信息提示,也可以通过“调试”和“运行”菜单来查找和排除错误。
6、生成可执行程序
为了使程序可以脱离VB环境来运行,通过“文件”菜单中的“生成工程1.exe”命令来生成可执行文件(.exe文件),此后即可直接执行该文件。
3.3.3.2创建用户界面
1、对象
VB的对象有自己的属性、方法、事件,可以把属性看做是一个对象的性质,把方法看做对象的动作,把时间看做是对象的响应。
VB是一种面向对象的编程语言,通过对属性、方法和事件的编程来实现各种功能。
2、对象的属性
属性是对象的数据,原来表示对象的状态。
属性有属性值,改变对象的属性值就可以改变对象的状态。
属性的设置可以在“属性”窗口中完成,也可以在运行时由代码实现。
在运行时可设置的属性成为读写属性,只能读取的属性叫做只读属性。
语法:
对象名.属性名=表达式(如果省略对象名则对象为当前的窗体)
例如:
Picture1.visible=true
3、对象的方法
对象的方法决定了对象要执行的动作,方法中的代码是看不见的,可通过调用来使用某个对象的方法。
语法:
[对象名].方法名[(参数1,参数2,参数3,….)]
例如:
Form1.show
Picture1.cls
4、对象的事件
事件是对象的响应,VB的应用程序是由事件驱动的。
也就是说,只有当事件发生时,下雨事件的程序才会运行。
如果没有事件的发生,则整个程序就处于停滞的状态。
在VB中,事件是能被对象识别的动作。
VB编程的核心就是为每个要处理的事件编写相应事件的过程代码,以便使用户或系统在触发相应事件时执行指定的操作。
5、创建窗体
(1)窗体的属性
窗体的属性有很多,按分类可以分为:
①杂项属性,②外观属性,③位置属性,④行为属性,⑤字体属性,⑥DDE属性,⑦缩放属性。
(2)窗体的方法
窗体有很多方法,通过在代码中调用来执行。
窗体最常用的方法是show方法,用于显示窗体。
常见的方法还有:
Hide(隐藏)、Refresh(刷新)、Move(移动)、Print(显示文本)。
(3)窗体的事件
窗体作为对象能够对事件做出响应。
具体可包括:
Activate和deactivate事件;Initialize事件;Load和Unload事件;Click和Dblclick事件;Resize事件。
(4)界面样式
SDI界面单文档界面
MDI界面多文档界面
6、控件
(1)控件的分类
VB控件可分为内部控件、ActiveX控件和可插入对象三类。
①内部控件
内部控件是由VB本身提供的控件,也称常用控件,这些控件通常显示在控件箱中。
②ActiveX控件
ActiveX控件是VB控件箱中的扩充部分,这些控件在使用前必须添加到工具箱中。
③可插入对象
可插入对象是由其他应用程序创建的对象,利用可插入对象,就可以在VB程序中使用其他应用程序的对象。
如图3.1所示
图3.1
第四章汉字字模提取的实现
4.1从汉字库中提取出汉字
4.1.1汉字的区位码
1981年,我国颁布了《信息交换用汉字编码字符集●基本集》(GB2312—80),该保准选出了6763个常用汉字和682个非常用汉字字符,以汉字库的形式提供,并为每个字符规定了标准码,以供这7445个字符在不同计算机系统之间进行信息交换使用。
这个标准所收集的字符及其编码称为国标码,又称国际交换码。
GB2312国标字符集有三个部分组成:
第一部分,是字母、数字和各种符号,包括了拉丁字母、俄文、日文平假名和片假名、希腊文以及汉语拼音等682个;第二部分,是一级常用汉字,按汉语拼音排列,共3755个;第三部分,是二级常用汉字,因为不太常用,所以按偏旁部首排列,共3008个。
GB2312国标字符集,构成了一个三维平面,分成了94行,94列,行号又称为区号,列号又称为位号。
即,汉字库统一规定组成94*94的矩阵,共分为94个区,编号01—94;每个区有94个位,编号01—94。
这样,每个汉字或字符在码表中都有与之相对应的位置,因此各有一个唯一的编码,该编码就是汉字或字符所在的区号(行号)和位号(列号)的二进制代码。
这就是汉字的区位码,用两个字节表示,区位码的第一个字节表示区号,第二个字节表示位号。
4.1.2汉字的内码
汉字内码是微机内部使用的代码、系统处理的对象。
在计算机内,英文字符是用一个字节的ASCⅡ码表示的。
但由于汉字众多,对一个汉字的表示,需要用到两个字节。
并且,为了与系统中的ASCⅡ码相区别,将这两个字节的最高位置1,并称之为机器内的汉字代码,即机内码,简称内码。
4.1.3汉字的区位码与内码之间的关系
汉字的区位码和内码之间的变换关系如下:
内码高位字节=区码+160;
内码地位字节=位码+160。
汉字字符的比较是以其机内码是否相等进行判断的,亦可把每个汉字的机内码转换成字符型再进行比较,即把所要转换的汉字与汉字库内所有汉字进行比较,若两个汉字字符相等,就可以等到其汉字的区位码。
这样,清楚了汉字的区位码,也就得到了汉字的位置码。
位置码=(区号-1)*94+位号–1
4.1.4汉字字模提取实现的技术原理
汉字的位置码,并不是这个汉字的字模。
字模,是汉字在汉字库中的存储形式。
例如,对于一个16*16的点阵汉字字库,要描述一个汉字的形体需要16行(即16区),每行有16列(即16位),存储需要2个字节,那么描述这个汉字则需要32个字节。
对于最常用的16*16点阵和24*24点阵的汉字字模的提取,在这里稍微做一下介绍,其它点阵的字模提取方法与之类似。
对于16*16点阵的汉字字库,每个字模信息占32个字节,根据2.1.3节的介绍,一个汉字字模在16*16点阵字库中的起始位置:
起始位置=32*[(内码高字节–161)*94+(内码低字节–161)]
同样,对于24*24点阵的汉字字库,每个字模信息占72个字节,则一个汉字字模在24*24点阵字库中的起始位置:
起始位置=72*[(内码高字节–161)*94+(内码低字节–161)]
但是,对于不同的24*24点阵的汉字字库,各种非汉字符号的存放方式不一样。
有的省去了前15个区,并将这15个区单独存放;有的则没有省去。
如果省去了前15个区,则将上述公式修改如下: