是C语言版本的,很简单,应该很容易看懂。
////////////////////////////////////
// 西文状态下实现汉字输出 (hzk16)//
// hzk16.h 郁明 [email protected] //
////////////////////////////////////#include <stdlib.h>
#include <stdio.h>
#include <graphics.h>
#include <string.h>#define HZK16 "hzk16"int test(unsigned int a,int k)
{
a<<=(k-1);
if(a&0x80)
return (1);
else
return (0);
}
void hz16(int X,int Y,char *zw,int c)
{ int n=0;
while(n!=strlen(zw)){ register int i,j;
register int xx=0;
register int yy=0;
FILE *fp;char *wm;long num;
fp=fopen(HZK16,"rb++");
if(fp==NULL){/*打开hzk16字库错误*/exit(0);}
if((zw[n]&0x80)==0)
{
num=188+zw[n]-33;
fseek(fp,(32)*num,0);
fread(wm,32,1,fp);
fclose(fp);
for(i=0;i<32;i++)
{for(j=1;j<=8;j++)
if(test(wm[i],j)==0)
xx++;
else{putpixel((xx)+X,Y+yy,c);xx++;}
if((i+1)%2==0){xx=0;yy++;}
}X=X+16;n=n+1;
}else{
zw[n]=zw[n]&0x7f;
zw[n+1]=zw[n+1]&0x7f;
zw[n]=zw[n]-0x20;
zw[n+1]=zw[n+1]-0x20;
num=(zw[n]-1)*94+(zw[n+1]-1);
fseek(fp,(32)*num,0);
fread(wm,32,1,fp);
fclose(fp);
for(i=0;i<32;i++)
{for(j=1;j<=8;j++)
if(test(wm[i],j)==0)
xx++;
else{putpixel((xx)+X,Y+yy,c);xx++;}
if((i+1)%2==0){xx=0;yy++;}
}X=X+16;n=n+2;
}}
}
////////////////////////////////////
// 西文状态下实现汉字输出 (hzk16)//
// hzk16.h 郁明 [email protected] //
////////////////////////////////////#include <stdlib.h>
#include <stdio.h>
#include <graphics.h>
#include <string.h>#define HZK16 "hzk16"int test(unsigned int a,int k)
{
a<<=(k-1);
if(a&0x80)
return (1);
else
return (0);
}
void hz16(int X,int Y,char *zw,int c)
{ int n=0;
while(n!=strlen(zw)){ register int i,j;
register int xx=0;
register int yy=0;
FILE *fp;char *wm;long num;
fp=fopen(HZK16,"rb++");
if(fp==NULL){/*打开hzk16字库错误*/exit(0);}
if((zw[n]&0x80)==0)
{
num=188+zw[n]-33;
fseek(fp,(32)*num,0);
fread(wm,32,1,fp);
fclose(fp);
for(i=0;i<32;i++)
{for(j=1;j<=8;j++)
if(test(wm[i],j)==0)
xx++;
else{putpixel((xx)+X,Y+yy,c);xx++;}
if((i+1)%2==0){xx=0;yy++;}
}X=X+16;n=n+1;
}else{
zw[n]=zw[n]&0x7f;
zw[n+1]=zw[n+1]&0x7f;
zw[n]=zw[n]-0x20;
zw[n+1]=zw[n+1]-0x20;
num=(zw[n]-1)*94+(zw[n+1]-1);
fseek(fp,(32)*num,0);
fread(wm,32,1,fp);
fclose(fp);
for(i=0;i<32;i++)
{for(j=1;j<=8;j++)
if(test(wm[i],j)==0)
xx++;
else{putpixel((xx)+X,Y+yy,c);xx++;}
if((i+1)%2==0){xx=0;yy++;}
}X=X+16;n=n+2;
}}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货