c语言中显示的字体那个最好,在C语言中实现汉字显示

在我推荐的文章中对汉字的编码作了详尽的介绍,在此就不多说了.

对汉字在计算机中的编码了解之后,我们应该怎样编写汉字显示程序呢.

既然汉字是以字模的形式保存的,那么我们就应该获得汉字在汉字库中的字模储存位置.

我们可以用以下方式来得到字模的储存位置:

字模首地址=((机内码低字节+95)×94+(机内码高字节+95))×N

注:N为一个汉字点阵字模的字节数。

得到了字模数据之后,再对每个字节的位进行判断,如果位为1,用putpixel()在相就的点上画上一点,

如果位上为0,则不作画点操作.知道了原理之后,开始编程就OK了.以下是我个人编写好的汉字显示

程序,希望对大家有参考作用.

对12X12点阵的汉字显示:

void printCHN12(int xCoor,int yCoor,int color,int distanceHZK12,char *chinese)

/*xCoor,yCoor指出汉字显示的位置,color显示的颜色,distanceHZK12为两个相邻的汉字之间的距离,

chinese是要显示的汉字*/

{

long filePosition;   /*存放一个汉字在汉字库中的位置*/

int i,j,k;

int pointX=xCoor,pointY=yCoor;  /*给出扫描点的输出位置*/

int tempBit;

char tempChar;

FILE *pointHZK12=fopen("HZK12","rb"); /*打开12X12点阵汉字库*/

while(*chinese)/*遍历所有需要显示的汉字*/

{

if((*chinese) & 0x80)  /*判断是否是汉字*/

{

/*获得某汉字在字库中的字模位置*/

filePosition=(long)((*chinese+95)*94+(*(chinese+1)+95))*24;

/*将文件位置指针指向字模的首地址*/

fseek(pointHZK12,filePosition,0);

/*由于12X12点阵中有12行*/

for(i=0;i<12;i++)

{

/*每一行有两个字节*/

for(j=0;j<2;j++)

{

/*得到一个字节*/

tempChar=fgetc(pointHZK12);

/*用来测试字节的位*/

tempBit=0x80;

for(k=0;k<8;k++)

{

if(tempBit & tempChar)

/*作"与"位操作,如果是1,就在这个位置上画点*/

putpixel(pointX+k,pointY,color);

tempBit=tempBit>>1;/*测试下一个位*/

}

pointX+=8;/*下一个字节的输出位置*/

}

pointY++; /*下一行的输出位置*/

pointX-=16;

}

pointY=yCoor;  /*下一个汉字的输出位置*/

pointX+=12+distanceHZK12;

chinese+=2;  /*由于汉字的储存只占二个字节空间*/

}

else/*不是汉字*/

chinese+=1;  /*由于非汉字的储存只占一个字节空间*/

}

fclose(pointHZK12);   /*关闭汉字库*/

return ;

}

对16X16点阵汉字的显示:

void printCHN16(int xCoor,int yCoor,int color,int distanceHZK16,char *chinese)

/*xCoor,yCoor指出汉字显示的位置,color显示的颜色,distanceHZK16为两个相邻的汉字之间的距离,

chinese是要显示的汉字*/

{

long filePosition;   /*存放一个汉字在汉字库中的位置*/

int i,j,k;

int pointX=xCoor,pointY=yCoor;  /*给出扫描点的输出位置*/

char tempChar;

int tempBit;

FILE *pointHZK16=fopen("HZK16","rb"); /*打开16X16点阵汉字库*/

while(*chinese)/*遍历所有需要显示的汉字*/

{

if((*chinese) & 0x80)  /*判断是否是汉字*/

{

/*获得某汉字在字库中的字模位置*/

filePosition=(long)((*chinese+95)*94+(*(chinese+1)+95))*32;

/*将文件位置指针指向字模的首地址*/

fseek(pointHZK16,filePosition,0);<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值