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