?? dianzhen.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 + -