欢迎光临112期刊网!
网站首页 > 论文范文 > 计算机论文 > 计算机应用 > 不依赖高点阵字库实现屏幕汉字显示

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

日期:2023-01-24 阅读量:0 所属栏目:计算机应用


在设计软件封面或菜单标题时,常需用到放大的汉字显示。通常采用的方法是一边从高点阵字库中读取汉字的字形码,一边加以变换在图形方式下绘点;但高点阵字库占有较大存储空间,例如 :2.13汉字系统中四种字体(宋、仿宋、黑、楷)的40x40点阵字库共占用近5m字节的硬盘空间。一般汉字操作系统中的汉字显示都采用16x16点阵字库(仅占约260k字节);
而由于硬盘空间的限制,并不是每台微机上都装有高点阵字库。
如何使汉字放大显示程序不依赖高点阵字库而独立运行?本文提供一种方法,将需要放大显示的汉字串的字形码一次性从2.13i高点阵字库(40x40点阵)读入一个subhzk文件,以后每次显示放大汉字时只需从该文件读取字模信息,而subhzk比高点阵字库要小的多。这样,汉字显示程序运行时就彻底摆脱了高点阵字库(只需打开文件subhzk),可在西文方式或任何中文方式下运行。
程序采用turbo c2.0编写,汉字放大显示程序disphz运行时只需将subhzk和相应显示器的图形驱动程序(如、)随放在同一目录下即可。
须注意的是,40x40点阵字模(字形码)实际上由40×36点阵组成,其汉字字形码排列格式为
@@;图1@@
程序清单:
/*程序readghz.c:将需放大显示的汉字串的字形码从2.13系统40x40点阵字库读入
文件subhzk*/
#include
#include
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
#include
#include
#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{
fread(dot-arrays,sizeof(dot-arrays),1,fp);
for(i=0;i<36;i++) /*绘汉字上排(1至72字节所含点阵)*/
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;
} 本文链接:http://www.qk112.com/lwfw/jsjlw/jisuanjiyingyong/244282.html

论文中心更多

发表指导
期刊知识
职称指导
论文百科
写作指导
论文指导
论文格式 论文题目 论文开题 参考文献 论文致谢 论文前言
教育论文
美术教育 小学教育 学前教育 高等教育 职业教育 体育教育 英语教育 数学教育 初等教育 音乐教育 幼儿园教育 中教教育 教育理论 教育管理 中等教育 教育教学 成人教育 艺术教育 影视教育 特殊教育 心理学教育 师范教育 语文教育 研究生论文 化学教育 图书馆论文 文教资料 其他教育
医学论文
医学护理 医学检验 药学论文 畜牧兽医 中医学 临床医学 外科学 内科学 生物制药 基础医学 预防卫生 肿瘤论文 儿科学论文 妇产科 遗传学 其他医学
经济论文
国际贸易 市场营销 财政金融 农业经济 工业经济 财务审计 产业经济 交通运输 房地产经济 微观经济学 政治经济学 宏观经济学 西方经济学 其他经济 发展战略论文 国际经济 行业经济 证券投资论文 保险经济论文
法学论文
民法 国际法 刑法 行政法 经济法 宪法 司法制度 法学理论 其他法学
计算机论文
计算机网络 软件技术 计算机应用 信息安全 信息管理 智能科技 应用电子技术 通讯论文
会计论文
预算会计 财务会计 成本会计 会计电算化 管理会计 国际会计 会计理论 会计控制 审计会计
文学论文
中国哲学 艺术理论 心理学 伦理学 新闻 美学 逻辑学 音乐舞蹈 喜剧表演 广告学 电视电影 哲学理论 世界哲学 文史论文 美术论文
管理论文
行政管理论文 工商管理论文 市场营销论文 企业管理论文 成本管理论文 人力资源论文 项目管理论文 旅游管理论文 电子商务管理论文 公共管理论文 质量管理论文 物流管理论文 经济管理论文 财务管理论文 管理学论文 秘书文秘 档案管理
社科论文
三农问题 环境保护 伦理道德 城镇建设 人口生育 资本主义 科技论文 社会论文 工程论文 环境科学