C语言输出汉字字库中的文本(使用 putpixel画点函数显示)

先明确下汉字在机内的表示
1.机内码出现的原因:
机内码的出现是为了解决ASCII码和国标码同时使用时产生二义性的问题;
2.机内码的表示:
国标码的机内码为二字节长的代码,它是在相应国标码的每个字节最高位上加“1”,即汉字机内码=汉字国标码+8080H,其高字节由该汉字的区码+A0H,低字节由该汉字的位码+A0H。
3.汉字16*16点阵:
在这里插入图片描述
代码如下:

  #include <graphics.h>
  #include <stdio.h>
  
  int  getbit(unsigned char c,int n)
  {return ((c>>n)&1); 
   }

  void puthz16(int qm,int wm)
  {
   long recordnum;
   int i1,i2,i3;
   int py=1,x=200,y=200;
   char by[32];//字符型占一个字节 
   FILE *fp;
   fp=fopen("C:\\计算机图形学\\hzk16","rb");//hzk16为汉字字库文件 
   recordnum=(qm-py)*94+wm-1; //16*16点阵汉字字模的32个字节称为一个记录。由汉字的区位码可求得该字在字库中的记录号。
   recordnum=recordnum*32;//记录号*32,即得到该字在16*16字库中字模的第一字节的位置
   fseek(fp,(long)recordnum,0);
   fread(by,32,1,fp);
   for(i1=0;i1<16;i1++)//i1代表点阵第几行 
       for(i2=0;i2<2;i2++)//i2代表第几个字节 
	 for(i3=0;i3<8;i3++)//i3代表 
	 if(getbit(by[i1*2+i2],7-i3))//判断若为1,则进行putpixel画点 
	    putpixel(x+i2*8+i3,y+i1,WHITE);
    }
    //还可以将汉字放大两倍(根据需要)显示,即一个像素点变成四个像素点
    /*  {
    	putpixel(x+i2*16+2*i3,y+2*i1,WHITE);
	    putpixel(x+i2*16+2*i3+1,y+2*i1,WHITE);
	    putpixel(x+i2*16+2*i3+1,y+2*i1+1,WHITE);
	    putpixel(x+i2*16+2*i3,y+2*i1+1,WHITE);}*/

   int main()
   {initgraph(500,500);
    puthz16(16,1);//根据汉字区位码传参 
    getch();
    closegraph();
    return 0;
 }

汉字区位表可直接查询到
字库文件下载

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值