logo资料库

从HZK16中读取汉字的c语言源代码.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
#include #include ////////////////////////////////////////////////////////////////// /*从字库中读取对应文字*/ void Read(FILE *HZK,unsigned char * chinese,char **mat) { unsigned char qh,wh; if((HZK=fopen("HZK16","rb"))==NULL) printf("文件不存在或不能读!"); qh=chinese[0]-0xa0;wh=chinese[1]-0xa0; //获得区码与位码 fseek(HZK,(94*(qh-1)+(wh-1))*32l,SEEK_SET); fread(mat,32,1,HZK); fclose(HZK); } /*把二进制的 mat 数组转变成字符 change 数组*/ void change(char mat[][2],char **array,int m,int n) { } } } l=0; } return ; } int i,j,k,l=0; for(i=0;i<16;i++) { for(j=0;j<2;j++) { for(k=0;k<8;k++) { if(mat[i][j]&(0x80>>k)) //提出每个字节的 0 和 1 的状态 { *((char*)array+n*i+l) ='#'; l++; } else { *((char*)array+n*i+l) ='-'; l++;
/*输出函数*/ void Print(char array[][16]) { int i,j; for(i=0;i<16;i++) { for(j=0;j<16;j++) { printf("%c",array[i][j]); } printf("\n"); } } /*旋转函数*/ int revolve(char array[][16],char **narray,int m,int n,int angle) { if(((angle-90)%360==0)||((angle+270)%360==0)) *((char*)narray+n*i+j)=array[j][15-i]; else if(((angle+90)%360==0)||((angle-270)%360==0)) *((char*)narray+n*i+j)=array[15-j][15-i]; else if(((angle-180)%360==0)||((angle+180)%360==0)) *((char*)narray+n*i+j)=array[15-i][j]; else if(angle%360==0) *((char*)narray+n*i+j)=array[i][j]; int i,j; for(i=0;i<16;i++) { for(j=0;j<16;j++) { else return 0; } } return 1; } /*翻转函数*/ int turnover(char array[][16],char **narray,int m,int n,int tag) { int i,j; for(i=0;i<16;i++) { for(j=0;j<16;j++)
*((char*)narray+n*i+j)=array[i][15-j];//左右翻转 *((char*)narray+n*i+j)=array[15-i][j];//上下翻转 { if(tag==0) else if(tag==1) else return 0; } } return 1; } /*放大函数的辅助,提取 0、1 状态*/ void getFontInfo(char *mat,int row,int column,int &phasInfo) { if(mat[2*row+column/8]&(0x80>>(column%8))) { phasInfo=1; } else { } } phasInfo=0; /*放大函数 */ void magnify(char *mat,int multiple) { int i,j,k,r; int phasInfo; for(i=0;i<16;i++) { for(k=0;k
} printf("\n"); } } } ////////////////////////////////////////////////////////////////// int i=0,j=0,q=0; char mark; int flag,angle,tag,multiple; char mat[16][2],array[16][16],narray[16][16]; unsigned char * chinese; char input[3]; FILE *HZK; printf("\n\t\t========本程序是对点阵字库 HZK16 的读取========\n"); printf("\t\t==========高忠派 U200913888 通信 0904=========\n"); /*选择不同功能*/ printf("\n 请选择进入不同的功能模式:\n"); printf("\t1、直接显示汉字。\n"); printf("\t2、显示旋转汉字(输入正数为逆时针旋转,输入负数为顺时针旋转)。 printf("\t3、显示翻折汉字(输入 0 为左右翻转,输入 1 为上下翻转)。\n"); printf("\t4、显示放大汉字。\n"); for(;;) { int main() { \n"); fflush(stdin); printf("请选择功能模式:"); scanf("%d",&flag); /*汉字输入*/ fflush(stdin); printf("请输入一个汉字:"); gets(input); chinese=(unsigned char *)input; Read(HZK,chinese,(char **)mat); change(mat,(char **)array,16,16); switch(flag) { case 1: printf("直接输出汉字:\n"); Print(array); break;
case 2: printf("输入旋转角度(90 的整数倍)"); scanf("%d",&angle); revolve(array,(char**)narray,16,16,angle); if(angle%90==0) { Print(narray); printf("输入错误!\n"); printf("选择旋转方式(0 或 1)"); scanf("%d",&tag); turnover(array,(char**)narray,16,16,tag); if(tag==0||tag==1) { Print(narray); } else break; case 3: } else break; case 4: printf("输入错误!\n"); printf("选择放大倍数"); scanf("%d",&multiple); magnify((char*)mat,multiple); break; default: printf("输入错误!\n"); break; } printf("\n 输入#结束,其他任意键继续:"); fflush(stdin); if((mark=getchar())=='#') break; } return 0; }
分享到:
收藏