怎样从"字模库"中取出对应得字节?(100分)

  • 主题发起人 主题发起人 福利彩票
  • 开始时间 开始时间

福利彩票

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手,我有一有关字符传送问题急需解决,望尽快帮书忙!
我想从"字模库"中取出字符(汉字和英文字符,根据其二进制码)对应的二进制码,
然后发送到显示屏上(字符的显示用汇编控制),我就是不知利用怎样的算法去
读取。字模库为通用的:hzk16 , asc16 两个文件。
谢谢,谢谢了!
 
这个问题好古老,ucdos 的说明文档里好象有关于字库的 SDK 的说明,你可找来看看。
 
hzk16是最简单的了,几乎谈不上算法,把汉字用区位分开,得到区号和位号,就可以在HZK16
中先找区偏移,再找位偏移,这样就得到总的偏移地址,然后就可以取出这个16*16区域内的点信息
画上去就要以了
 
给你一段取字模并显示的程序,不过是 C 写的,用来在do
s 的图形方式下画汉字,已经有 4-5 年历史了
代码:
static int mirrx=0,mirry=0,qxx=0,qxxqz=0,qxy=0,hzasstyle=0;
void showHZxy(int x,int y,int zx,int zy,int color,char *hzas)
{
	int count,hor,ver,fphz,fpasc,li,flag;
	register int bitx,kk;
	unsigned and,defand;
	unsigned char hzbuf[33],hh,*pp,*hzbufp;
	if(hzasstyle)fphz=open("f://ucdos//hzk16f",0);
	else
 fphz=open("f://ucdos//hzk16",0);
	fpasc=open("f://ucdos//asc16",0);
	for(count=strlen(hzas);count>0;count--,x=x+li*zx+((qxx)? qxxqz:0),y-=16*zy,zy+=qxy)
	{
		if((unsigned)(*hzas)>=0xa1&&(unsigned)(*(hzas+1))>=0xa1)
		{	getHZmode(hzas,hzbuf,fphz);
			hzas++;
			hzas++;
			hzbufp=hzbuf;
			for(kk=0;kk<16;kk++){
				pp=hzbufp++;
				hh=*hzbufp;
				*hzbufp++=*pp;
				*pp=hh;}
			hzbufp=hzbuf;
			if(mirry)
				for(kk=0;kk<16;kk++,kk++){
					and=*((unsigned *)(hzbufp+(30-kk)));
					*((unsigned *)(hzbufp+(30-kk)))=*((unsigned *)(hzbufp+kk));
					*((unsigned *)(hzbufp+kk))=and;}
			count--;
			li=16;
			if(mirrx)defand=0x1;
			else
 defand=0x8000;
			flag=1;
		}
		else
{
			getASCmode(hzas,hzbuf,fpasc);
			hzas++;
			hzbufp=hzbuf;
			if(mirry)
				for(kk=0;kk<16;kk++){
					hh=*(hzbufp+(15-kk));
					*(hzbufp+(15-kk))=*(hzbufp+kk);
					*(hzbufp+kk)=hh;}
			li=8;
			if(mirrx)defand=0x1;
			else
 defand=0x80;
			flag=0;
		}
		for(hor=0;hor<16;hor++){
			for(ver=0;ver<zy;ver++,x-=li*zx,x+=qxx,y++)
					for(kk=0,and=defand;kk<li;kk++){
						for(bitx=0;bitx<zx;bitx++,x++){
							if(flag)if((*(unsigned *)hzbufp)&amp;and)putpixel(x,y,color);
							if(!flag)if((*hzbufp)&amp;(char)and)putpixel(x,y,color);
						}
						if(mirrx)and<<=1;
						else
 and>>=1;
					}
			if(flag)hzbufp++,hzbufp++;
			else
 hzbufp++;
		}
	 }
	close(fphz);
	close(fpasc);
}
 
呵呵,找我就对了,保证给你搞掂!!!
我以前在DOS下利用过这种方法生成自己的小字库的,
后来利用这方法取得某些汉字点阵信息写入小型打印机的EPROM中供打印用,
请上QQ找我,23555873。
 

Similar threads

回复
0
查看
861
不得闲
D
回复
0
查看
923
DelphiTeacher的专栏
D
D
回复
0
查看
715
DelphiTeacher的专栏
D
D
回复
0
查看
676
DelphiTeacher的专栏
D
后退
顶部