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