利用C语言编程实现小型矢量汉字库的创建及调用资料下载.pdf

上传人:b****1 文档编号:16086744 上传时间:2022-11-19 格式:PDF 页数:4 大小:142.84KB
下载 相关 举报
利用C语言编程实现小型矢量汉字库的创建及调用资料下载.pdf_第1页
第1页 / 共4页
利用C语言编程实现小型矢量汉字库的创建及调用资料下载.pdf_第2页
第2页 / 共4页
利用C语言编程实现小型矢量汉字库的创建及调用资料下载.pdf_第3页
第3页 / 共4页
利用C语言编程实现小型矢量汉字库的创建及调用资料下载.pdf_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

利用C语言编程实现小型矢量汉字库的创建及调用资料下载.pdf

《利用C语言编程实现小型矢量汉字库的创建及调用资料下载.pdf》由会员分享,可在线阅读,更多相关《利用C语言编程实现小型矢量汉字库的创建及调用资料下载.pdf(4页珍藏版)》请在冰豆网上搜索。

利用C语言编程实现小型矢量汉字库的创建及调用资料下载.pdf

点阵字库(如24点阵)汉字是由纵横各24个点组成,凡有笔划的为1,无笔划的点为0,这样一个汉字的字模可用72个字节二进制数表示,每个汉字的字模长度都相等,按其区位码顺序存放在字库中,而矢量字体并不是用点阵信息描述汉字的笔划,而是将汉字的笔划边缘用直线段描述成封闭的曲线,并将线段各端点的坐标经压缩存储,它是图形信息建库的。

由于每个汉字的笔划不一样,所以每个汉字在库中所占长度是不相同的这样,矢量字库不能象阵字库那样定位,只能采用索引的方法。

因而每种矢量字库都是由两部分组成,一部分是汉字的索引信息,它包括每个汉字的矢量数据在库中的位置地址以及汉字字形数据的长度,存放在字库的前面部分,按汉字的区位码顺序存放;

另一部分是汉字的字形数据,包括控制信息和各点坐标信息,是字库的主体放在字库的后面。

如UCDOS3X的矢量字库HZJSISTJ(宋体简体)、HZKSLFSJ(仿朱简体)、HZKSLKTJ(楷体简体)、HZKSIHTJ(黑体简体),其索引信息眭度为6个字节-前面两个字节是汉字矢量数据在库中的起始位置,后两个字节为汉字字形数据的长度。

28电脑编程技巧与维护1998年第9期要进行矢量汉字显示,首先根据其机内码按下面公式:

汉字的索引信息首址一(汉字机匈码高位字节一0Xal+汉字机内码低位字节一0Xa1)6计算出其索引信息首址,然后从指定的矢量字库按索引地址连续读出6个字节的索引信息,再根据索引信息中字形数据在库中的位置及字形数据的长度从库中读出相应的字形数据,最后裤码还原得到其轮廓多边形的各点坐标,画出多边形并填充,即可得到矢量汉字了解了一般矢量汉字库的结构,不难看出,要建立一个小型矢量汉字库,小字库的结构也必须包括索引信息和矢量数据区两部分,所不同的是小型矢量汉字库的索引信息并非按汉字的区位码顺序排列,这样必然会给检索带来麻烦。

为解决此问题,就必须在小型矢量字库的索引信息中,再增加其区位码信息。

如此一来,在小型矢量字库中,每个汉字的索引信息长度为8个字节,其前两个字节为汉字的区位码,接着的四个字节是字形数据在库中的位置,后两个字节为汉字字形数据的长度。

比较一下原来矢量字库的索引信息表结构是lypedefstruclunsignedIongoddr;

,字形数据的地址*unsignedintsiZe;

,*字形数据的长度*,。

SlP;

而小型矢量字库的索引信皂表结构应为typedefstructcunsignedint0wm,*汉字的区位码*unsLgnedlongaddr;

*字形数据的地址*ugnedtn【sze,*字嘭数据的长度,sire建立小型矢量汉字库,首先将要显示的汉字用文字处理软件(WPS的N方式或ccED)编成文本文件维普资讯http:

/P编撰语言_HZTxT,注意取掉重复的汉字然后根据HZTxT文件确定小字库存放汉字的个数,后面程序中的字符常量MAx定义为32,就可存放32个汉字。

由于每个汉字的索引信息为8个字节,小型矢量字库的索引信息区长度为256字节,矢量数据区将从字库第257字节处开始存放第一个汉字的矢量数据。

若要增加存放汉字的数量,只需修改符号常量MAx的数值最后用c语言编写程序,编程的思路是这样的:

首先根据运行程序所带的参数打开相应的矢量字库,如果没带参数,则程序终止并提示操作方法;

如果要打开的矢量字库不存在,同样显示提示信息并退出。

接着打开文本文件HZTxT和小矢量字库文件XSLHZK,从文本文件HZTxT读取第一个汉字的内码,换算出它的区位码,写入小矢量字库的索引信息结构中。

再根据其内码计算出它在原矢量字库索引信息中的首址,从中读出6个字节的索引信息,然后根据索引信息中的地址及长度,在原矢量字库中读出相应的矢量数据,将其写入小型矢量字库中的矢量数据区。

而小字库索引信息中的地址应等于MAx*8,索引信息中的长度等于原矢量字库索引信息中的字形数据长度,将这两项数据写入小字库的索引信甚中。

接着读取第二个汉字的内码,其操作同前,但第二个汉字索引信息的地址应等于第一个汉字的地址加上第一个汉字的字形数据的长度,如此循环直到文本文件结束为止根据以上思路编写出程序xs】ZKC,在TurboC20集成环境下进行编译,生成XSLZKEXE文件,运行XSLZKEXE就可建立小矢量汉字库XSLHZK。

运行XSLZKExE程序必须在C盘uCDOS子目录下有”HzKSLSTJ、HzKSLFSJ、HZKSI,KTJ”、”HZKSLHTJ”矢量字库。

该程序运行格式如下:

XSLZK回车其中:

S表示生成宋体小型矢量汉字库;

F表示生成仿宋体小型矢量汉字库;

K表示生成楷体小型矢量汉字库;

H表示生成黑体小型矢量汉字库。

四者必须选择其中一种。

如果要建立以上四种以外的字体如隶字体,则必须在UCDOS子目录下有其相应的矢量字库文件,并把程序中相应的语句稍作修改即可小型矢量汉字库建立以后,可由XSIHZKYSC编译链接生成演示程序,该程序运行就调用小型汉字库,首先根据要显示的汉字区位码,在打开的小型矢量字库的索引信息中寻找,找到后根据其提供的地址、长度信息在矢量数据区读出相应的矢量数据,然后解码还原,得到其轮廓多边形各顶点的坐标,用fillpoly()函数画出多边形并填充,即可显示矢量汉字xslzkc创建小型矢量汉字库源程序#Inolude”stdlo#defineMAX32typedefstructunsignedlongaddrunsignedin1size;

sip:

typedefslructunsignedin1owrfl:

unsignedlongaddrunsgnedintsize:

sire;

voidquit(void;

main(intargc,char*argv)unsignedcharch,n2slPhi1slmzMAX-:

lntitk,0mtwmiIongrscFILE*fp,*fp1,texlfpif(argcf=2)err:

printf、nUsage:

xslzkn”t叫ntf(”、门s:

STf:

FSkKTh:

HT)6,xlt

(1)islrcpy(n,argvt:

)istrupr【n);

ch=nO;

swltch(ch)caseS:

if(fp=open(c:

ucdoshzkslsti“”rb)=NULL)qui1(】breakcaseF:

if(fp=foben(”clucdoshzkslfsl,”rb)一=NULL)qL1()breakcageK:

if(晒一open(”c:

ucdoshzkslkq,rb)=一NULL)qui()IbreakIcaseH:

if“fpfope

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1