按字母查成语词典:A|B|C|D|E F G|H|J|K|L|M|N|O|P|Q|R|S|T|W|X|Y|Z
在线新华字典:按偏旁部首查询汉字 | 按汉字拼音查询汉字 | 五笔字根查询
工商管理论文 | 工学工业论文 | 社会艺术论文 | 理学医学论文 | 语言教育论文 | 计算机论文
» 论文阅读
Turbo C在图形状态下快速显示彩色汉
在用Turbo C提供的图形函数进行作图时,为了使屏幕显示更加直观明了,常常需要在图形显示的同时,显示必要的汉字说明。这时Turbo C提供的一些函数就不能用了。在汉字操作系统中,有一个16×16点阵的汉字库,主要用于屏幕显示。字库中的汉字按16×16点阵模式存储,即每个汉字相当于16×16=256个点组成。占用16×2=32个连续的字节单元。字节的每一位(bit)表示一个点的属性:1表示亮点,0表示暗点。连续的两个字节表示该汉字字模的一行。32个字节的排列顺序如图:
@@T5S08100.GIF;图1@@
计算机对西文字符采用一个字节表示,我国规定汉字用内码(2个字节)表示。为了保证中西文兼容,也就是说,汉字系统的内码必须同时允许ASCII码和汉字的同时使用,而两者之间不能发生冲突。目前规定每个字节只用七位,若两个字节的最高位均为1,则该字符为汉字。
国标对汉字库的结构作了统一的规定:即将汉字库分为若干个区,每个区有94个汉字。
每一个汉字在字库中有一个固定的区和位,即每一个汉字有一个区位码。知道了区位码也就相当于知道了汉字在字库中的位置。由于汉字的内码与区位码有一定的关系,所以,只要通过内码就可以得到区位码,从而也就得到了汉字的字模。
设一个汉字的内码为ddff,则此汉字的区码为dd-161;位码为ff-161;该汉字字模的第一个字节在字库中的位置是(94×区码+位码)×32。这时只要连续的读出32个字节,就可以得到该汉字的字模。
有些文章和书籍采用写点的方式来处理这32个字节。即某位为1,则写点,某位为0,则不写点。如果这样处理,则每个汉字需循环256次,写256个点,字数越多,则会显得很慢。
Turbo C提供了这样两个函数:
setlinestyle(int linestyle,unsignedupattern,int thickness);
line(int x0,int y0,int x1,int y1);
setlinestyle函数为设置线型函数,当linestyle取USERBIT-LINE且thickness取NORM-WIDTH时,其后的line函数就会按upattern的16位二进制数画一点宽的线。upattern的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。
我们在读字模的时候可以一次读2个字节,形成一个16位的二进制数,把此二进制数设为upattern,然后画线。这样只需循环16次就可写完一个汉字。速度得到很大的提高。尤其在字数较多时,更体现出此方法的优势。
以下为用画线的方法在西文状态下显示汉字的函数,在Turbo C++1.0、DOS6.0、兼容386机上运行通过。
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
FILE *stream; //设 stream为全程变量//
void open-file()
{//打开汉字库函数,使用的汉字库为UCDOS的16点阵字库:HZK16//
if((stream=fopen("hzk16","rb"))==NULL)
{ printf("Can't Open File HZK16"); exit(1);}
}
void close-file()
{//关闭汉字库函数//
fclose(stream); return;
}
void write16(unsigned char *word,int x,int y,int wd,int col)
{//word为所要显示的汉字串,x,y为要显示汉字的起始坐标,wd为两个汉字//
//之间的间隔,col为要显示汉字的颜色.//
register int k,i;
unsigned char cw[33];
char c[2];
unsigned long int qu-ma,wei-ma;
setcolor(col);settextstyle(0,HORIZ-DIR,1);
for(k=0;word[k]!='/0';k+=2)
{ if((word[k]&0x80)!=0) //判断是否为汉字,是则往下运行//
{ qu-ma=word[k]-161; wei-ma=word[k+1]-161;
if(fseek(stream,(94*qu-ma+wei-ma)*32,SEEK-SET)!=0)
{ printf("fseek call fail"); exit(-1);
}
i=flell(stream); fread(cw,32,1,stream);
i=ftell(stream);
for(i=0;i<32;i+=2)
{ setlinestyle(4,cw[i]<<8|cw[i+1],1);
line(x+15,y,x,y); y++;
} y-=16;x=x+15+wd;
}
else //不是汉字,则进行西文处理//
{ c[0]=word[k]; c[1]='\0';
outtextxy(x,y+4,c); x=x+8+wd;k--;
}
}
setlinestyle(0,0,1); return;
}
main()
{//演示程序:在屏幕上显示汉字“用画线的方法快速显示彩色汉字 abc ABC”//
int gd=VGA,gm=VGAHI,i;
initgraph(&gd,&gm,"");
open-file();
for(i=1;i<16;i++)
write16(“用画线的方法快速显示彩色汉字 abc ABC”,85,i*30,8,i);
close-file(); getch();
closegraph(); return;
}
本文摘录自互联网络,在此刊登仅为传递更多信息,版权归作者所有.
» 培训展台
» 学校展示
» 武汉培训课程导航
武汉培训 |
武汉英语培训 |
武汉日语培训 |
武汉韩语培训 |
武汉电脑培训 |
武汉平面设计培训 |
武汉CAD制图培训 |
武汉办公软件培训 |
武汉室内设计培训 |
武汉计算机等级考试 |
武汉3G培训 |
武汉会计培训 |
武汉会计从业资格证培训 |
武汉会计电算化培训 |
武汉会计职称考试 |
武汉职业技能培训 |
武汉厨师培训 |
武汉化妆培训 |
武汉驾校 |
武汉美容美发培训 |
武汉叉车培训 |
武汉模具培训数控培训 |
武汉职业资格认证 |
武汉教师资格证培训 |
武汉导游培训 |
武汉建筑五大员培训 |
武汉人力资源师培训 |
武汉公务员培训 |
武汉心理咨询师培训 |
武汉造价师培训 |
武汉成人学历教育 |
武汉自考 |
武汉专本科学历 |
武汉成人教育 |
武汉成人高考 |
武汉成教专本科 |
武汉研究生报名 |
武汉才艺培训 |
武汉舞蹈培训 |
武汉影视表演培训 |
武汉美术培训 |
武汉艺术高考培训 |
武汉口才培训 |
武汉瑜伽培训 |
武汉企业管理培训 |
武汉内审员培训 |
武汉拓展培训 |
武汉企业内训 |
武汉公开课

