⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dianzhen.txt

📁 汉字点阵提取,包括24x24,16x16,12x12
💻 TXT
字号:
/****************************************************** 
 文件名   :All.c 
 描  述   :12,14,16点阵汉字显示文件 
 语  言   :TC2.0 
 作  者   :刘利国 
 修  改   : 
 日  期   :2002-11-5 
 说  明   :需要12,14,16点阵汉字字库的支持 
******************************************************/ 
#include <stdio.h> 
#include <graphics.h> 
#include <fcntl.h> 
#include <io.h> 
int hzk_p,asc_p; 
void open_hzk(char filename[]); 
void open_asc(char filename[]); 
void get_hz(char incode[],char bytes[],unsigned long uiSize ); 
void get_asc(char incode[],char bytes[],unsigned long uiSize ); 
void disasc(int x,int y,char code[],int color, 
                                                unsigned int uiDianZhenSize); 
void dishz(int x0,int y0,char code[],int color, 
                                         unsigned int uiDianZhenSize, 
                                         unsigned int uiDuoYuBit); 
/*字模的大小 
16*16点阵   ZI_MO_SIZE=32 
14*14点阵   ZI_MO_SIZE=28 
12*12点阵   ZI_MO_SIZE=24 
//该变量一定为long,否则出错 
*/ 
unsigned long  ZI_MO_SIZE[3]={32,28,24}; 
/*汉字点阵 
16*16点阵   ZI_MO_SIZE=16 
14*14点阵   ZI_MO_SIZE=14 
12*12点阵   ZI_MO_SIZE=12 
*/ 
unsigned int  DIAN_ZHEN_SIZE[3]={16,14,12}; 
/*多余位数(对于12*12和14*14点阵字库,该位有意义) 
16*16点阵   ZI_MO_SIZE=0 
14*14点阵   ZI_MO_SIZE=2 
12*12点阵   ZI_MO_SIZE=4 
*/ 
unsigned int  DUO_YU_BIT[3]={0,2,4}; 
#define ZOOMX    1  /*X方向的放大倍数,1为原始尺寸*/ 
#define ZOOMY    1  /*Y方向的放大倍数,1为原始尺寸*/ 

main() 
{ 
        int x=10,i; 
        int y=10; 
        char *s; 
        char *filename[3]={"e:\\hzk\\hzk16","e:\\hzk\\hzk14","e:\\hzk\\hzk12"}; 
        char *fileasc[3]={"e:\\hzk\\asc16","e:\\hzk\\asc14","e:\\hzk\\asc12"}; 
        char code[32];/*因为不能动态定位,所以取最大值32*/ 
        char tmpcode[3]={0}; 
        unsigned char mask=0x80; 
        int driver=DETECT,errorcode; 
        int mode; 
        int iOffset; 
        initgraph(&driver,&mode,""); 
        errorcode=graphresult(); 
        if(errorcode!=0) 
        { 
                printf("error 
"); 
                getch(); 
                exit(1); 
        } 
        for(i=0;i<3;i++) 
        { 
                open_hzk(filename[i]); 
                open_asc(fileasc[i]); 
                s="北京惠234悦12通234电s子技术有限234公司"; 
                while(*s!=NULL) 
                { 
                        while(x<600 && (*s!=NULL)) 
                        { 
                                tmpcode[0]=*s; 
                                tmpcode[1]=*(s+1); 
                                if(tmpcode[0] & mask) 
                                { 
                                        get_hz(s,code,ZI_MO_SIZE[i]); 
                                        dishz(x,y,code,GREEN,DIAN_ZHEN_SIZE[i],DUO_YU_BIT[i]); 
                                  x+=20*ZOOMX; 
                                  s+=2; 
                                } 
                                else 
                                { 
                                  disasc(x,y,s,LIGHTGREEN,DIAN_ZHEN_SIZE[i]); 
                                  x+=10*ZOOMX; 
                                  s+=1; 
                                }                                 
                        } 
                        x=10; 
                        y+=20*ZOOMY; 
                } 
                y+=20;/*换行*/ 
                close(hzk_p); 
                close(asc_p); 
        } 
        getch(); 
        closegraph(); 
} 
/****************************************************** 
函数名称:open_hzk 
函数功能:打开字库文件 
传入参数:无 
返 回 值:无 
建立时间: 
修改时间: 
建 立 人: 
修 改 人: 
其它说明:如果失败,则直接退出程序 
******************************************************/ 
void open_hzk(char filename[]) 
{ 
        hzk_p=open(filename,O_BINARY|O_RDONLY); 
        if(hzk_p==-1) 
        { 
                printf("The file HZK not exits! 
"); 
                getch(); 
                closegraph(); 
                exit(1); 
        } 
} 
/****************************************************** 
函数名称:open_asc 
函数功能:打开字库文件 
传入参数:无 
返 回 值:无 
建立时间: 
修改时间: 
建 立 人: 
修 改 人: 
其它说明:如果失败,则直接退出程序 
******************************************************/ 
void open_asc(char filename[]) 
{ 
        asc_p=open(filename,O_BINARY|O_RDONLY); 
        if(asc_p==-1) 
        { 
                printf("The file asc not exits! 
"); 
                getch(); 
                closegraph(); 
                exit(1); 
        } 
} 
/****************************************************** 
函数名称: 
函数功能: 
传入参数: 
返 回 值: 
建立时间: 
修改时间: 
建 立 人: 
修 改 人: 
其它说明: 
******************************************************/ 
void get_hz(char incode[],char bytes[],unsigned long uiSize ) 
{ 
        unsigned char qh,wh; 
        unsigned long offset; 
        qh=incode[0]-0xa0; 
        wh=incode[1]-0xa0; 
        offset=(94*(qh-1)+(wh-1))*uiSize; 
        lseek(hzk_p,offset,SEEK_SET); 
        read(hzk_p,bytes,uiSize); 
} 
/****************************************************** 
函数名称: 
函数功能: 
传入参数: 
返 回 值: 
建立时间: 
修改时间: 
建 立 人: 
修 改 人: 
其它说明: 
******************************************************/ 
void get_asc(char incode[],char bytes[],unsigned long uiSize ) 
{ 
        unsigned char qh,wh; 
        unsigned long offset; 
        offset=incode[0]*uiSize; 
        lseek(asc_p,offset,SEEK_SET); 
        read(asc_p,bytes,uiSize); 
} 
/****************************************************** 
函数名称: 
函数功能: 
传入参数: 
返 回 值: 
建立时间: 
修改时间: 
建 立 人: 
修 改 人: 
其它说明:对于24*24的点阵字库,存放格式如下: 
          纵向存放3个字节(24位),横向存放24个字节,每个字模占72个字节 
          字符排列顺序如下: 
          1   4   7   10   ...... 
          2   5   8   11   ...... 
          3   6   9   12   ......  
                                         
                                        对于16*16的点阵字库,存放格式如下: 
          横向存放2个字节(16位),其中第二个字节没有多余的数据 
          纵向存放16个字节,每个字模占32个字节 
          字符排列顺序如下: 
                                        1    2 
                                        3    4 
                                        5    6 
                                        ...... 
                                         
                                        对于14*14的点阵字库,存放格式如下: 
          横向存放2个字节(16位),其中第二个字节的后2位是多余的数据 
          纵向存放14个字节,每个字模占28个字节 
          字符排列顺序如下: 
                                        1    2 
                                        3    4 
                                        5    6 
                                        ...... 
           
                                        对于12*12的点阵字库,存放格式如下: 
          横向存放2个字节(16位),其中第二个字节的后4位是多余的数据 
          纵向存放12个字节,每个字模占24个字节 
          字符排列顺序如下: 
                                        1    2 
                                        3    4 
                                        5    6 
                                        ...... 
******************************************************/ 
void dishz(int x0,int y0,char mat[],int color, 
           unsigned int uiDianZhenSize, 
                                    unsigned int uiDuoYuBit 
           ) 
{ 
        unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; 
        register int x,y,row,col; 
        register int byte; 
        int zoomX,zoomY;/*x,y方向*/ 
        x=x0;y=y0; 
        byte=0; 
        for(col=0;col<uiDianZhenSize;col++) /*列*/ 
        { 
                for(zoomY=0;zoomY<ZOOMY;zoomY++)  /*纵向放大*/ 
                { 
                        for(row=0;row<uiDianZhenSize;row++) /*16行(2个8位)*/ 
                        { 
                                for(zoomX=0;zoomX<ZOOMX;zoomX++) /*横向放大*/ 
                                { 
                                        if((mask[byte%8]& mat[byte/8])!=NULL) 
                                        { 
                                                putpixel(x,y,color); 
                                        } 
                                        x++; /*x位置加一*/ 
                                } 
                                byte++; 
                        } 
                        byte+=uiDuoYuBit; /*去掉多余位,对于16*16点阵来说,该位为0*/ 
                        x=x0; 
                        y++;/*y坐标加1*/ 
                        byte-=16; /*重新修正byte,重复绘制y像点*/ 
                } 
                byte+=16; /*每次写完1行(2个字节,16位),修正byte*/ 
        } 
} 

void disasc(int x0,int y0,char code[],int color, 
                                          unsigned int uiDianZhenSize 
                                          ) 
{ 
        unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; 
        register int x,y,row,col; 
        register int byte; 
        int zoomX,zoomY;/*x,y方向*/ 
        char mat[16]={0};/*因为不能动态定位,所以取最大值16*/ 
        get_asc(code,mat,uiDianZhenSize); 
        x=x0;y=y0; 
        byte=0; 
        for(col=0;col<uiDianZhenSize;col++) /*列*/ 
        { 
                for(zoomY=0;zoomY<ZOOMY;zoomY++)  /*纵向放大*/ 
                { 
                        for(row=0;row<8;row++)  
                        { 
                                for(zoomX=0;zoomX<ZOOMX;zoomX++) /*横向放大*/ 
                                { 
                                        if((mask[byte%8]& mat[byte/8])!=NULL) 
                                        { 
                                                putpixel(x,y,color); 
                                        } 
                                        x++; /*x位置加一*/ 
                                } 
                                byte++; 
                        } 
                        x=x0; 
                        y++;/*y坐标加1*/ 
                        byte-=8; /*重新修正byte,重复绘制y像点*/ 
                } 
                byte+=8; /*每次写完1行(2个字节,16位),修正byte*/ 
        } 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -