急急急!怎样取到汉字字库!!!(解决后,另赠100分) 如题:如何得到汉字字库(即16*16的汉字点阵)。 最好不要用HZK16等汉字库文件。请各位高手帮下忙,很急! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我靠!!这个我最在行了,前几天我还在编写一直接写汉字的dos程序 关键的三个函数,自己编的,你可以加以修改,原理一样的void get_hz(char incode[],char bytes[]){unsigned char qh,wh;unsigned long offset;qh=incode[0]-0xa0;wh=incode[1]-0xa0;offset=(94*(qh-1)+(wh-1))*32L;lseek(hzk_p,offset,SEEK_SET);read(hzk_p,bytes,32);}int key(){union REGS rg;rg.h.ah=0;int86(0x16,&rg,&rg);return rg.h.ah;}void dishz(int x0,int y0,char code[],int color) {unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; register int i,j,x,y,pos,m; char mat[32]; get_hz(code,mat); y=y0; for(i=0;i<16;++i) {x=x0; pos=2*i; for(j=0;j<16;++j) {m=getpixel(x,y); m=m^m; putpixel(x,y,m); if((mask[j%8]&mat[pos+j/8])!=NULL) putpixel(x,y,color); cx=x; cy=(y-4); ++x; } ++y; }}void showfont(int x,int y,char *s){ x=x*20,y=y*16; setbkcolor(BLACK); while(*s!=NULL) {while(x<640&&(*s!=NULL)) { dishz(x,y,s,fontcolor); x+=20; s+=2; } x=20;y+=20; }} void dishz(int x0,int y0,char code[],int color);void show(int color);void get_hz(char incode[],char bytes[]);void showfont(int x,int y,char *s);main(){.....int graphdriver =DETECT, graphmode;initgraph(&graphdriver, &graphmode, "d:\\tc\\bgi");hzk_p=open(".\\hzk16",O_BINARY|O_RDONLY);//你要显示汉字时,直接在main()中调用Showfont(x,y,"要显示的字符串");//x,y为坐标......... 谢谢zhaogaojian(蜜柑年成)! 可是,hzk16这个文件系统里有吗,还是要自己加? 将hzk16考到你的程序目录下就可以了刚才忘了写一句话,注意用玩关闭文件!!!!!!!!! 我看不懂----------》最好不要用HZK16等汉字库文件。不用这个那用HZK24 哈哈 我也用过,很可惜,我的代码随着格式化而消失了 ——————(我大学里写的最长的C代码) 用hzk的话,那程序中保存的文件 所在的目录还要添加这个汉字库文件,有些不合理。 因为程序中保存的文件的目录和程序的目录不同。 我的程序就是编辑一幅画面(里面有些图形和文字),然后下载到单片机。程序生成的画面保存为文件,那么打开这个文件进行下载时,就要读取hzk。就要保证这个文件所在目录有hzk,不是吗? hzk只需在编辑时用,即只在你的图形编辑器处使用,此处hzk只是帮助你制图形用的,你看见dishz函数中的putpixel(x,y,color);实际上输出的不是文字编码,而是文字图形,只要你保存的图像格式正确,以后不需要hzk的 但问题是,下位机显示汉字时需要文字编码,要通过上位机串口传送。这样,当我打开PC机上的画面文件(保存过的),进行下载时,就要读取hzk文件,若是画面文件所在目录没有hzk,就不行了。(因为程序中打开hzk时,默认为当前目录)这个问题该怎么解决呢?zhaogaojian(蜜柑年成),麻烦您再想想办法。 zhaogaojian (30) 繁体字库显示会吗? 寻求方案 TCHAR赋值和比较的问题 有的消息在Messages框里面找不到,应该怎么办? 用c++如何实现通过代理服务器访问数据库?高手帮忙了! 今天趋势 一面的时候被问到的一道题 ,不会答 急!如何比较文件修改时间? 关于CEdit的简单问题 再菜一次,!!再菜一次 SVN的版本库备份出错提示:期待文件系统(FS)格式 “2”;找到格式“4”。 快来抢分,关于Dialog的简单问题,先谢了! 奇怪的类定义,第一次见到!! 请高人来看! 图像实时采集※解压※显示※保存※求救
void get_hz(char incode[],char bytes[])
{unsigned char qh,wh;
unsigned long offset;
qh=incode[0]-0xa0;
wh=incode[1]-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;
lseek(hzk_p,offset,SEEK_SET);
read(hzk_p,bytes,32);
}
int key()
{union REGS rg;
rg.h.ah=0;
int86(0x16,&rg,&rg);
return rg.h.ah;
}
void dishz(int x0,int y0,char code[],int color)
{unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
register int i,j,x,y,pos,m;
char mat[32];
get_hz(code,mat);
y=y0;
for(i=0;i<16;++i)
{x=x0;
pos=2*i;
for(j=0;j<16;++j)
{m=getpixel(x,y); m=m^m;
putpixel(x,y,m);
if((mask[j%8]&mat[pos+j/8])!=NULL)
putpixel(x,y,color);
cx=x;
cy=(y-4);
++x;
}
++y;
}}
void showfont(int x,int y,char *s)
{ x=x*20,y=y*16;
setbkcolor(BLACK);
while(*s!=NULL)
{while(x<640&&(*s!=NULL))
{
dishz(x,y,s,fontcolor);
x+=20;
s+=2;
}
x=20;y+=20;
}}
void show(int color);
void get_hz(char incode[],char bytes[]);
void showfont(int x,int y,char *s);
main()
{.....
int graphdriver =DETECT, graphmode;
initgraph(&graphdriver, &graphmode, "d:\\tc\\bgi");
hzk_p=open(".\\hzk16",O_BINARY|O_RDONLY);
//你要显示汉字时,直接在main()中调用Showfont(x,y,"要显示的字符串");
//x,y为坐标
.........
可是,hzk16这个文件系统里有吗,还是要自己加?
刚才忘了写一句话,注意用玩关闭文件!!!!!!!!!
不用这个那用HZK24
哈哈 我也用过,很可惜,我的代码随着格式化而消失了
——————(我大学里写的最长的C代码)
你看见dishz函数中的putpixel(x,y,color);实际上输出的不是文字编码,而是文字图形,
只要你保存的图像格式正确,以后不需要hzk的
繁体字库显示会吗?