资源描述:
《不依赖高点阵字库实现屏幕汉字显示 》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、不依赖高点阵字库实现屏幕汉字显示在设计软件封面或菜单标题时,常需用到放大的汉字显示。通常采用的方法是一边从高点阵字库中读取汉字的字形码,一边加以变换在图形方式下绘点;但高点阵字库占有较大存储空间,例如:2.13汉字系统中四种字体(宋、仿宋、黑、楷)的40X40点阵字库共占用近5M字节的硬盘空间。一般汉字操作系统中的汉字显示都采用16X16点阵字库(仅占约260K字节);而由于硬盘空间的限制,并不是每台微机上都装有高点阵字库。如何使汉字放大显示程序不依赖高点阵字库而独立运行?本文提供一种方法,将需要放大显示的汉字串的字形码一次性从2.13I
2、高点阵字库(40X40点阵)读入一个SUBHZK文件,以后每次显示放大汉字时只需从该文件读取字模信息,而SUBHZK比高点阵字库要小的多。这样,汉字显示程序运行时就彻底摆脱了高点阵字库(只需打开文件SUBHZK),可在西文方式或任何中文方式下运行。程序采用TurboC2.0编写,汉字放大显示程序DISPHZ运行时只需将SUBHZK和相应显示器的图形驱动程序(如CGA.BGI、EGAVGA.BGI)随DISPHZ.EXE放在同一目录下即可。须注意的是,40X40点阵字模(字形码)实际上由40×36点阵组成,其汉字字形码排列格式为T5S061
3、00.GIF;图1程序清单:/程序READGHZ.C:将需放大显示的汉字串的字形码从2.13系统40X40点阵字库读入文件SUBHZK/#include<stdio.h>#include<io.h>intopenhzk40(int);FILEfp,fptr;/定义全局文件指针/charhzk-table[]={"c:\213\hzk40s","c:\231\hzk40f","c:\213\hzk40h","c:\213hzk40k"};main(){unsignedcharstring="管理信息系
4、统";/需放大的汉字串/unsignedcharinter-code,zone-code,bit-code;intlocate,hzk-num,flag=0charp,dot-arrays[180];if((fptr=fopen("subhzk","p;0x7f;/汉字区码/flag=1;}eles{bit-code=(inter-code-0xa0)0x7f;/汉字位码/flag=0;locate=(zone-code-0x10)94+bit-code-1;/汉字字模地址/fseek(fp,locate180L,SEEK-SET);/置
5、文件指针于汉字字模地址/fread(dot-arrays,sizeof(dot-arrays),1,fp);/读汉字字模于数组中/f)/打开2.13系统40X40点阵字库文件/{if((fp=fopen(hzk-table[hzk-num],"rb"))==NULL){cputs("Erroronopenfile");getch();exit(1);}return0;}/程序DISPHZ.C:从文件SUBHZK中读取汉字字形码信息并放大显示/#include<graphics.h>#include<stdio.h>
6、#include<ftl.h>#defineRED4#definegrOK0#defineSTRLEN6/要显示的汉字串所含汉字个数/intode();FILEfp;main(){init-graph();/初始化图形模式/if((fp=fopen("subhzk","rb"))==NULL){printf("Cannotopenfile/n");exit(1);}ode();return0;}voidinit-graph(){intgdriver=DETECT,gmode,errorcode;initgraph(gdrive
7、r,gmode,"");errorcode=graphresult();if(errorcode!=grOK){printf("Graphicserror:%s",grapherrormsg(errorcode));printf("Pressanykeytohalt:");getch();exit();}}/汉字字模读取与放大显示/int,inty-zoom,intcolor){inti,j,k,n;chardot-arrays[180];/定义180字节数组,暂存汉字字模/for(n=0;n<STRLEN;n++){fread
8、(dot-arrays,sizeof(dot-arrays),1,fp);for(i=0;i<36;i++)/绘汉字上排(1至72字节所含点阵)/for(j=0,j<2;j++)f