注册 登录
编程论坛 C图形专区

【请教】汉字点阵显示出现乱码

hpf0511 发布于 2008-03-25 19:21, 1712 次点击
刚刚开始学习,恳请大家的帮忙!这是在论坛里下的一个程序,运行后出现乱码,是为什么呢?
#include "graphics.h"
#include "stdio.h"
main()
{ int i=VGA,j=VGAHI,k;
unsigned char mat[16][2],chinease[3]="我";
FILE *HZK;
if((HZK=fopen("hzk16","rb"))==NULL)exit(0);
initgraph(&i,&j,"");
i=chinease[0]-0xa0;j=chinease[1]-0xa0; /*获得区码与位码*/
fseek(HZK,(94*(i-1)+(j-1))*32,SEEK_SET);
fread(mat,32,1,HZK);
for(j=0;j<16;j++)
for(i=0;i<2;i++)
for(k=0;k<8;k++)
if(mat[j][i]&(0x80>>k)) /*测试为1的位则显示*/
putpixel(i*8+k,j,WHITE);

getch();
closegraph();
fclose(HZK);
}
各位能帮我看看吗?还有能详细讲解下汉字到底是怎么显示的吗?对这个程序中循环这一段有些看不懂。谢谢!
2 回复
#2
jig2008-03-27 17:51
他的循环就是按位来判断现在该点是否要显示

如果12X12点阵的汉字,他是怎么工作呢。其实很简单,一行有12个点,我们用位来表示此点是否要画,那布局就是这样

比如:1 字
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0    0 0 0 0   一行有12个点,所以要用两个字节来表示,所以最右边4位不用。
.
.从上到下总共12行
.
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0    0 0 0 0

其实那个循环就是在判断哪些位为1,是1的就绘制,这样一个汉字就显示出来了。看到上面那个方阵
明白为什么汉字库叫“点阵”了吧?

所以对于一个12点阵汉字,就是 2字节 X 12行 = 24字节
那16点阵  2字节 X 16行 = 32字节
24点阵 3字节 X 24行 = 72字节
。。。。。。

不知道我说的明不明白。

[[it] 本帖最后由 jig 于 2008-3-27 17:58 编辑 [/it]]
#3
hpf05112008-03-28 18:33
嗯,明白了,谢谢
1