问个关于点阵字体的问题 请达人来帮帮忙。。。。。。 请问如何打印出点阵字体,就是银行存折上的那种字体。无论用什么打印都可以,例如可以用WORD 也可以用FR 只要能打印出来就行 请帮帮忙,告知一下思路和解决办法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢LS提醒,我下载了一个HZK16字库,符合要求吗?请问怎么用呢? 我又下载了一个Hzk14.bin,可还是不知道怎么用,郁闷。。HELP , FIRE 这个要看你用的字库的说明了一般字库的bin文件是把字符按区划分后顺序存储.你根据所要打印的字符编码计算出偏移量,然后取出点阵数据.这里是我们用的24点阵汉字字库的索引程序 FILE *fp; long Addr=0; fp=fopen("/lib/gt24.bin","rb"); if(fp==NULL) { printf_debug("Font not found.\n"); fclose(fp); return -2; } if(Str[1]==0x7F) { printf_debug("No HZ Font.\n"); fclose(fp); return -3; } if(Str[0]>=0xA1 && Str[0]<=0xAB && Str[1]>=0xA1)/*Section 1*/ Addr = (Str[0] - 0xA1)*94+(Str[1]-0xA1); else if(Str[0]>=0xA8 && Str[0]<=0xA9 && Str[1]<0xA1)/*Section 5*/ { if(Str[1]>0x7F) Addr=(Str[0]-0xA8)*96+(Str[1]-0x40)+845; else Addr=(Str[0]-0xA8)*96+(Str[1]-0x40)+846; } if(Str[0]>=0xB0 && Str[0]<=0xF7 && Str[1]>=0xA1)/*Section 2*/ Addr=(Str[0]-0xB0)*94+(Str[1]-0xA1)+1038; else if(Str[0]<0xA1 && Str[0]>=0x81)/*Section 3*/ { if(Str[1]>0x7F) Addr=(Str[0]-0x81)*190+(Str[1]-0x40)+1038+6767; else Addr=(Str[0]-0x81)*190+(Str[1]-0x40)+1038+6768; } else if(Str[0]>=0xAA && Str[1]<0xA1)/*Section 4*/ { if(Str[1]>0x7F) Addr=(Str[0]-0xAA)*96+(Str[1]-0x40)+1038+12847; else Addr=(Str[0]-0xAA)*96+(Str[1]-0x40)+1038+12848; } if(Str[1]>=0x30 && Str[1]<=0x39)/*Extended Section*/ { if(Str[3]<0x30 || Str[3]>0x39) { printf_debug("No HZ Font.\n"); fclose(fp); return -4; } Addr=(Str[2]-0x81)*12600+(Str[3]-0x39)*1260+(Str[0]-0xEE)*10+(Str[1]-0x39)+22046; if(Addr<22046 || Addr>22046+6530) { printf_debug("No HZ Font.\n"); fclose(fp); return -5; } } Addr*=72; fseek(fp,Addr,SEEK_SET); fread(FontBuf,1,72,fp); fclose(fp); return 0;大致上就是先通过字符编码来确定所属哪个汉字区,在通过字库说明里面的偏移计算公式计算出偏移Addr,然后读出之后的72字节数据就是该汉字的点阵数据,再根据字典数据的组织打印到屏幕或者打印机.上面的代码仅仅只是参考,因为我们用的字库不一样 疯狂吐血中。。我还以为下载了字库就OK了呢,我先研究研究先,谢谢LS 一样的.我们的英文和数字有专门的字库,是另外一个 xxx.bin文件.只是索引的时候简单一点,没那么多分区 skylkj GG 有没有DELPHI的程序啊 C++我看不懂 http://hi.baidu.com/hrman/blog/item/4616bc2675ce13128a82a193.html这里有你下的那个HZK16的使用说明关键就是计算偏移量,然后就是操作文件读取.delphi读取二进制文件可以用Tfilestream 一个看似简单但实质复杂的问题? 请问,网络广播和网络电视如何实现啊?(直播得,不要录播的) 日期灾民比较? 如何捕获这一事件,高手请进! 大虾们,帮忙啊,计算机如何通过串口来控制发光二级管的亮灭? 菜鸟问题,Delphi7 网络通讯, 在线等。 一个奇怪的问题,请高手来看一下。。。。 怎样在delphi里访问SQL Server的系统表,欢迎各位高手来讨论 主子表单显示的问题 求帮忙远程弄下delphi代码 adoquery1 怎么样 拷贝一条 adoquery2 里的某条记录? 一个奇怪的问题,为toolbar添加toolbutton时,原有的toolbutton丢失。
long Addr=0; fp=fopen("/lib/gt24.bin","rb");
if(fp==NULL)
{
printf_debug("Font not found.\n");
fclose(fp);
return -2;
}
if(Str[1]==0x7F)
{
printf_debug("No HZ Font.\n");
fclose(fp);
return -3;
}
if(Str[0]>=0xA1 && Str[0]<=0xAB && Str[1]>=0xA1)/*Section 1*/
Addr = (Str[0] - 0xA1)*94+(Str[1]-0xA1);
else if(Str[0]>=0xA8 && Str[0]<=0xA9 && Str[1]<0xA1)/*Section 5*/
{
if(Str[1]>0x7F) Addr=(Str[0]-0xA8)*96+(Str[1]-0x40)+845;
else Addr=(Str[0]-0xA8)*96+(Str[1]-0x40)+846;
}
if(Str[0]>=0xB0 && Str[0]<=0xF7 && Str[1]>=0xA1)/*Section 2*/
Addr=(Str[0]-0xB0)*94+(Str[1]-0xA1)+1038;
else if(Str[0]<0xA1 && Str[0]>=0x81)/*Section 3*/
{
if(Str[1]>0x7F) Addr=(Str[0]-0x81)*190+(Str[1]-0x40)+1038+6767;
else Addr=(Str[0]-0x81)*190+(Str[1]-0x40)+1038+6768;
}
else if(Str[0]>=0xAA && Str[1]<0xA1)/*Section 4*/
{
if(Str[1]>0x7F) Addr=(Str[0]-0xAA)*96+(Str[1]-0x40)+1038+12847;
else Addr=(Str[0]-0xAA)*96+(Str[1]-0x40)+1038+12848;
}
if(Str[1]>=0x30 && Str[1]<=0x39)/*Extended Section*/
{
if(Str[3]<0x30 || Str[3]>0x39)
{
printf_debug("No HZ Font.\n");
fclose(fp);
return -4;
}
Addr=(Str[2]-0x81)*12600+(Str[3]-0x39)*1260+(Str[0]-0xEE)*10+(Str[1]-0x39)+22046;
if(Addr<22046 || Addr>22046+6530)
{
printf_debug("No HZ Font.\n");
fclose(fp);
return -5;
}
}
Addr*=72;
fseek(fp,Addr,SEEK_SET);
fread(FontBuf,1,72,fp);
fclose(fp);
return 0;大致上就是先通过字符编码来确定所属哪个汉字区,在通过字库说明里面的偏移计算公式计算出偏移Addr,然后读出之后的72字节数据就是该汉字的点阵数据,再根据字典数据的组织打印到屏幕或者打印机.上面的代码仅仅只是参考,因为我们用的字库不一样
这里有你下的那个HZK16的使用说明关键就是计算偏移量,然后就是操作文件读取.delphi读取二进制文件可以用Tfilestream