8×16字模制作器,可以把普通的字母(ASCII下常用的128个字符I),转换成8*16的字模。
提供一个我早年编写的turbo C程序给你参考,不过是用来提取中文汉字字模的,当然也能提取普通字符,不过提取出来的应该是16×16的字模,你可以参考一下思路自己修改。
其中字模是要从以前的UCDOS里面的一个文件“HZK16”提取,所以要在当前文件夹下有此文件;zk.dat这个文件里存的是要提取的那些汉字,是一个纯文本文件,可以实现想提取那些汉字就提取哪些;最后提取出来的汉字字模是存在ch16.vol这个文件里。
另外在UCDOS里还有一个字模文件“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);
}