为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

不依赖高点阵字库实现屏幕汉字显示

2017-10-21 7页 doc 20KB 12阅读

用户头像

is_321635

暂无简介

举报
不依赖高点阵字库实现屏幕汉字显示不依赖高点阵字库实现屏幕汉字显示 在设计软件封面或菜单标题时,常需用到放大的汉字显示。通常采用的方法是一边从高点阵字库中读取汉字的字形码,一边加以变换在图形方式下绘点,但高点阵字库占有较大存储空间,例如 :2.13汉字系统中四种字体(宋、仿宋、黑、楷)的40X40点阵字库共占用近5M字节的硬盘空间。一般汉字操作系统中的汉字显示都采用16X16点阵字库(仅占约260K字节), 而由于硬盘空间的限制,并不是每台微机上都装有高点阵字库。 如何使汉字放大显示程序不依赖高点阵字库而独立运行?本文提供一种方法,将需要放大显示的汉字串...
不依赖高点阵字库实现屏幕汉字显示
不依赖高点阵字库实现屏幕汉字显示 在软件封面或菜单标题时,常需用到放大的汉字显示。通常采用的方法是一边从高点阵字库中读取汉字的字形码,一边加以变换在图形方式下绘点,但高点阵字库占有较大存储空间,例如 :2.13汉字系统中四种字体(宋、仿宋、黑、楷)的40X40点阵字库共占用近5M字节的硬盘空间。一般汉字操作系统中的汉字显示都采用16X16点阵字库(仅占约260K字节), 而由于硬盘空间的限制,并不是每台微机上都装有高点阵字库。 如何使汉字放大显示程序不依赖高点阵字库而独立运行?本文提供一种方法,将需要放大显示的汉字串的字形码一次性从2.13I高点阵字库(40X40点阵)读入一个SUBHZK文件,以后每次显示放大汉字时只需从该文件读取字模信息,而SUBHZK比高点阵字库要小的多。这样,汉字显示程序运行时就彻底摆脱了高点阵字库(只需打开文件SUBHZK),可在西文方式或任何中文方式下运行。 程序采用Turbo C2.0编写,汉字放大显示程序DISPHZ运行时只需将SUBHZK和相应显示器的图形驱动程序(如CGA.BGI、EGAVGA.BGI)随DISPHZ.EXE放在同一目录下即可。 须注意的是,40X40点阵字模(字形码)实际上由40×36点阵组成,其汉字字形码排列格式为 @@T5S06100.GIF;图1@@ 程序: /*程序READGHZ.C:将需放大显示的汉字串的字形码从 2.13系统40X40点阵字库读入 文件SUBHZK*/ #include<stdio.h> #include<io.h> int openhzk40(int); FILE *fp,*fptr; /*定义全局文件指针*/ char *hzk-table[]={"c:\\213\\hzk40s","c:\\231\\hzk40f", "c:\\213\\hzk40h","c:\\213\hzk40k"}; main() { unsigned char *string="管理信息系统"; /*需放大的汉字串*/ unsigned char inter-code ,zone-code,bit-code; int locate,hzk-num,flag=0 char *p,dot-arrays[180]; if((fptr=fopen("subhzk","wb"))==NULL){ printf("Cannot open file\n"); exit(1); } /*打开或创建文件SUBHZK */ openhzk40(1); p=string; while(*p) { inter-code=*p++; if(inter-code>0xal) if(flag==0) { zone-code=(inter-code-0xa0)&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); /*读汉字字模于数组中*/ fwrite(dot-arrays,sizeof(dot-arrays),1,fptr); /*写汉字字模到文件*/ } } fclose(fp); fclose(fptr); return 0; } int openhzk40(int hzk-num) /*打开2.13系统40X40点阵字库文件*/ { if((fp=fopen(hzk-table[hzk-num],"rb"))==NULL) { cputs("Error on open file"); getch(); exit(1); } return 0; } /*程序DISPHZ.C:从文件SUBHZK中读取汉字 字形码信息并放大显示*/ #include <graphics.h> #include <stdio.h> #include <fcntl.h> #define RED 4 #define grOK 0 #define STRLEN 6 /*要显示的汉字串所含汉字个数*/ int writehz (int,int,int,int,int,int); void init-graph(); void far restorecr tmode(); FILE *fp; main () { init-graph(); /*初始化图形模式*/ if((fp=fopen("subhzk","rb"))==NULL){ printf("Cannot open file/n"); exit(1); } writehz(30,30,10,2,2,RED); fclose(fp); getch(); restorecr tmode(); return 0; } void init-graph() { int gdriver=DETECT,gmode,errorcode; initgraph(&gdriver,&gmode,""); errorcode=graphresult(); if(errorcode!=grOK) { printf("Graphics error:%s\n",grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(); } } /*汉字字模读取与放大显示*/ int writehz(int x,int y,int z,int x-zoom,int y-zoom,int color) { int i,j,k,n; char dot-arrays[180]; /*定义180字节数组,暂存汉字 字模*/ for(n=0;n<STRLEN;n++) { fread(dot-arrays,sizeof(dot-arrays),1,fp); for(i=0;i<36;i++) /*绘汉字上排(1至72字节所含点 阵 1)*/ for(j=0,j<2;j++) for(k=0;k<8,k++) if((dot-arrays[i*2+j]>>(7-k))&1) putpixel(x-zoom*(x+i),y-zoom*(y+j*8+k),color); for(i=0;i<36;i++) /*绘汉字下排(73至180字节所含 点阵),*/ for(j=0,j<3;j++) for(k=0,k<8,k++) if((dot-arrays[72+i*3+j]>>(7-k))&1) putpixel(x-zoom*(x+i),y-zoom*(y+16+j*8+k),color); x=x+36+z; /*移位,准备绘下一汉字*/ } return 0;
/
本文档为【不依赖高点阵字库实现屏幕汉字显示】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索