int m;
void initgr(void)
{
int gd=DETECT,gm=0;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"");
}
void drawmat(char *mat,int matsize,int x,int y,int color)
{
int i;
int j;
int k;
int n;
n = (matsize-1)/8+1;
for(j=0; j<matsize; j++)
for(i=0; i<n; i++)
for(k=0; k<8; k++)
if(mat [j*n+i] & (0x80>>k))
putpixel(x+i*8+k, y+j, color);
}
/*接下来是输入一些字模的定义*/
因为这段程序我是在网上下载的,所以我看不懂!请你解释一下我在文中标示需要解释的!最不明白void drawmat里面的东西!谢谢了,我急着交作业的呀!
參考答案:这个程序主要是在没有中文DOS的平台下显示中文用的,如果以前用C语言编写过中文显示的人应该都知道,当然也可以显示英文,不过要显示文字的话这段程序不是很完整,还差一个读字模的函数,void drawmat()函数是传一个字模过去,将各个字模转成二进制,为1的就显示出来,为0的就不显示,英文的字模为8*16,中文的字模为16*16,显示英文时需要的字模长度为16个字符,中文则需要32个字符,例如传一串字模,因为网页不能显示机器字符,我把它转为16进制为
{0,0,0,18,3C,66,66,66,7E,66,66,66,0,0,0,0},转为二进制看看图形是什么?
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
看不清楚是吗?这样子
□□□□□□□□
□□□□□□□□
□□□□□□□□
□□□■■□□□
□□■■■■□□
□■■□□■■□
□■■□□■■□
□■■□□■■□
□■■■■■■□
□■■□□■■□
□■■□□■■□
□■■□□■■□
□□□□□□□□
□□□□□□□□
□□□□□□□□
□□□□□□□□
就是字符“A”,清楚吗?
转换中文与英文有点不同,就是先画一半,再画另一半,前16个字符是画左边,后16个字符是画右边。例如我们要画一个“中”字,字模为
{1,1,21,3F,21,21,21,21,21,21,3F,21,1,1,1,1,
0,0,4,7C,4,4,4,4,4,4,7C,4,0,0,0,0
}
转换为二进制就是:
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
***********
0000000
0000000
0000100
1111100
0000100
0000100
0000100
0000100
0000100
0000100
1111100
0000100
0000000
0000000
0000000
0000000
□□□□□□□■
□□□□□□□■
□□■□□□□■
□□■■■■■■
□□■□□□□■
□□■□□□□■
□□■□□□□■
□□■□□□□■
□□■□□□□■
□□■□□□□■
□□■■■■■■
□□■□□□□■
□□□□□□□■
□□□□□□□■
□□□□□□□■
□□□□□□□■
□□□□□□□□
□□□□□□□□
□□□□■□□□
■■■■■■□□
□□□□■□□□
□□□□■□□□
□□□□■□□□
□□□□■□□□
□□□□■□□□
□□□□■□□□
■■■■■□□□
□□□□■□□□
□□□□□□□□
□□□□□□□□
□□□□□□□□
□□□□□□□□
合并起来就是
000000010000000
000000010000000
001000010000100
001111111111100
001000010000100
001000010000100
001000010000100
001000010000100
001000010000100
001000010000100
001111111111100
001000010000100
000000010000000
000000010000000
000000010000000
000000010000000
□□□□□□□■□□□□□□□□
□□□□□□□■□□□□□□□□
□□■□□□□■□□□□■□□□
□□■■■■■■■■■■■■□□
□□■□□□□■□□□□■□□□
□□■□□□□■□□□□■□□□
□□■□□□□■□□□□■□□□
□□■□□□□■□□□□■□□□
□□■□□□□■□□□□■□□□
□□■□□□□■□□□□■□□□
□□■■■■■■■■■■■□□□
□□■□□□□■□□□□■□□□
□□□□□□□■□□□□□□□□
□□□□□□□■□□□□□□□□
□□□□□□□■□□□□□□□□
□□□□□□□■□□□□□□□□
这下你应该明白了吧。