8×16字模制作器,可以把普通的字母(ASCII下常用的128個(gè)字符I),轉(zhuǎn)換成8*16的字模。
提供一個(gè)我早年編寫的turbo C程序給你參考,不過(guò)是用來(lái)提取中文漢字字模的,當(dāng)然也能提取普通字符,不過(guò)提取出來(lái)的應(yīng)該是16×16的字模,你可以參考一下思路自己修改。
其中字模是要從以前的UCDOS里面的一個(gè)文件“HZK16”提取,所以要在當(dāng)前文件夾下有此文件;zk.dat這個(gè)文件里存的是要提取的那些漢字,是一個(gè)純文本文件,可以實(shí)現(xiàn)想提取那些漢字就提取哪些;最后提取出來(lái)的漢字字模是存在ch16.vol這個(gè)文件里。
另外在UCDOS里還有一個(gè)字模文件“ASC16”,里面存的是16×16的ASCII碼字符。
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
void main()
{
FILE *fp,*ofp,*ifp;
int i1,i2,i3,d,m,row=0,col=0,trow=0;
int c,c1,f=0,rr;
long length;
char by[32];
/*_setvideomode(_VRES16COLOR);*/
int gm=VGA,gd=VGAHI;
registerbgidriver(EGAVGA_driver);
initgraph(&gm,&gd,"");
if((fp=fopen("hzk16","rb"))==NULL)
{
printf("\7 Usage:hzk16 can not open!");
exit(0);
}
if((ifp=fopen("zk.dat","r"))==NULL)
{
printf("\7 Usage:can't open zk.dat!");
exit(0);
}
if((ofp=fopen("ch16.vol","wb"))==NULL)
{
printf("\7 Usage: can't open file" );
exit(0);
}
fseek(ofp,0,SEEK_SET);
while((c=getc(ifp))!=EOF)
{
if(kbhit())
break;
if(c>0xa1)
if(f==0)
{
f=1;
c1=(c-0xa1)&0x07f;
}
else
{
f=0;
length=(c1*94+((c-0xa1)&0x07f))*32L;
c1=24;
rr=8;
}
else
{
c=c&0x07f;
f=0;
if(c>=0x020)
{
length=c;
c1=12;
rr=8;
col+=12;
}
else
{
c1=0;
rr=0;
}
}
if(f==0)
if(c1==0)
{
col=0;
trow+=20;
if(trow>470)
{
/*_setvideomode(_VRES16COLOR);*/
initgraph(&gm,&gd,"");
trow=0;
}
row=trow;
}
else
{
fseek(fp,length,SEEK_SET);
fread(by,1,32,fp);
fwrite(by,1,32,ofp);
for(i1=0;i1<16;i1++)
{
for(i2=0;i2<2;i2++)
for(i3=0;i3<rr;i3++)
if(getbit(by[i1*2+i2],7-i3))
/*_setpixel(col+i2*8+i3,row);*/
putpixel(col+i2*8+i3,row,WHITE);
row++;
}
row=trow;
col=col+16;
}
}
fclose(ofp);
fclose(fp);
fclose(ifp);
getch();
/*_setvideomode(_DEFAULTMODE);*/
closegraph();
}
int getbit(unsigned char c, int n)
{
return((c>>n)&1);
}