henryqcy 发表于 2007-4-1 21:36

[求助]为什么24点阵输出的字不是我输入的字呢?

<P>下面是我的原函数:<BR>#include&lt;stdio.h&gt;<BR>#include&lt;graphics.h&gt;</P>
<P>FILE *hzk_p;<BR>void open_hzk(void);<BR>void get_hz(char incode[],char bytes[]);<BR>void dishz(int x,int y,char code[],int color);<BR>main()<BR>{<BR> int x=20;<BR> int y=100;<BR> char *s="带综复何如,其路情为了。造化中神秀,因秧歌混淆。当胸生曾云,决自如归鸟。会当凌绝顶,一览众山小。";       /*这些是我要输出的字*/<BR> int driver=DETECT;<BR> int mode=0;<BR> initgraph(&amp;driver,&amp;mode,"");<BR> open_hzk();<BR> while(*s!=NULL){<BR>  while(x&lt;600 &amp;&amp; (*s!=NULL)){<BR>   dishz(x,y,s,YELLOW);<BR>   x+=28;<BR>   s+=2;<BR>  }<BR>  x=20;y+=28;<BR> }<BR> getch();<BR> fclose(hzk_p);<BR> closegraph();<BR>}</P>
<P>void open_hzk()<BR>{<BR> hzk_p=fopen("e:/edwin/hzk24k","rb"); /*我要用24点阵楷体*/<BR> if(!hzk_p){<BR>  printf("HZK is not exist!\n");<BR>  getch();<BR>  closegraph();<BR>  exit(1);<BR> }<BR>}</P>
<P>void get_hz(char incode[],char bytes[]) /*这个函数用来读取一个incode指向的汉字到bytes[]中*/<BR>{<BR> unsigned char qh,wh;<BR> unsigned long offset;<BR> qh=incode[0]-0xa0;<BR> wh=incode[1]-0xa0;<BR> offset=(94*(qh-1)+wh-1)*72L;  /*汉字应该是分成94个区,每个区有94个汉字的吧,然后每个汉字要用72字节表示*/<BR> fseek(hzk_p,offset,SEEK_SET);<BR> fread(bytes,72,1,hzk_p);<BR>}</P>
<P>void dishz(int x0,int y0,char code[],int color) /*这个函数用来显示code指向的字*/<BR>{<BR> unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};</P>
<P> int i,j,x,y,pos;<BR> char mat[72];<BR> get_hz(code,mat);<BR> x=x0;<BR> for(i=0;i&lt;24;++i){<BR>  y=y0;<BR>  pos=3*i;<BR>  for(j=0;j&lt;24;j++){<BR>   if((mask[j%8]&amp;mat[pos+j/8])!=NULL)<BR>    putpixel(x,y,color);<BR>   ++y;<BR>  }<BR>  ++x;<BR> }<BR>}</P>

henryqcy 发表于 2007-4-1 21:47

但是输出的时候显示的不是我输入的字,是其他的,为什么呢

一笔苍穹 发表于 2007-4-2 11:22

可能是你区位号算错了吧,24点阵的和16点阵的算法有些不同

henryqcy 发表于 2007-4-2 14:22

能不能告诉我是分几区的,每个区有几个字

页: [1]

编程论坛