繁体字库问题 我有一个繁体字库文件,怎么从里读出字模呢? 比如说:“紅”的点阵在文件中的偏移量。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看这个程序吧/******************************************//* *//* 显示16*16和12*12点阵汉字的演示 *//* *//* Little Tiger 2003.11.13 *//* *//* 需要使用 HZK16,HZK12,ASC16文件 *//* *//******************************************/#include<stdio.h>#include<graphics.h>/* 显示16*16点阵汉字函数,使用HZK16文件,x,y为显示坐标,s为显示字符串,colour为颜色 */void hanzi16(int x,int y,char *s,int colour){ FILE *fp; char buffer[32]; register i,j,k; unsigned char qh,wh; unsigned long location; if((fp=fopen("hzk16","rb"))==NULL) { printf("Can't open hzk16!"); getch(); exit(0); } while(*s) { qh=*s-0xa0; wh=*(s+1)-0xa0; location=(94*(qh-1)+(wh-1))*32L; fseek(fp,location,SEEK_SET); fread(buffer,32,1,fp); for(i=0;i<16;i++) for(j=0;j<2;j++) for(k=0;k<8;k++) if(((buffer[i*2+j]>>(7-k))&0x1)!=NULL) putpixel(x+8*j+k,y+i,colour); s+=2; x+=16; } fclose(fp);}/* 显示12*12点阵汉字函数,使用HZK12文件,x,y为显示坐标,s为显示字符串,colour为颜色 */void hanzi12(int x,int y,char *s,int colour){ FILE *fp; char buffer[24]; register i,j,k; unsigned char qh,wh; unsigned long location; if((fp=fopen("hzk12","rb"))==NULL) { printf("Can't open hzk12!"); getch(); } while(*s) { qh=*(s)-0xa0; wh=*(s+1)-0xa0; location=(94*(qh-1)+(wh-1))*24L; fseek(fp,location,SEEK_SET); fread(buffer,24,1,fp); for(i=0;i<12;i++) for(j=0;j<2;j++) for(k=0;k<8;k++) if((buffer[i*2+j]>>(7-k))&0x1) putpixel(x+8*j+k,y+i,colour); s+=2; x+=12; } fclose(fp);}/* 中英文混合输出函数,使用HZK16,ASC16文件,x,y为显示坐标,s为显示字符串,colour为颜色 */void puts16(int x,int y,char *s,unsigned char colour){ register int i,j,k; FILE *fpa,*fph; char buffera[16],bufferh[32]; unsigned char qh,wh; unsigned long location; fpa=fopen("asc16","rb"); fph=fopen("hzk16","rb"); while(*s) { if(*s>0) { fseek(fpa,(*s)*16,0); fread(buffera,1,16,fpa); for(i=0;i<16;i++) for(j=0;j<8;j++) { if(((buffera[i]>>(7-j))&0x1)!=NULL) putpixel(j+x,i+y,colour); } s++; x+=8; } else { qh=*s-0xa0; wh=*(s+1)-0xa0; location=(94*(qh-1)+(wh-1))*32L; fseek(fph,location,SEEK_SET); fread(bufferh,32,1,fph); for(i=0;i<16;i++) for(j=0;j<2;j++) for(k=0;k<8;k++) if(((bufferh[i*2+j]>>(7-k))&0x1)!=NULL) putpixel(x+8*j+k,y+i,colour); s+=2; x+=16; } } fclose(fpa); fclose(fph);}main(){ int gd=DETECT,gm; initgraph(&gd,&gm,""); hanzi12(260,160,"疯狂甲虫乐园!",LIGHTCYAN); hanzi16(246,200,"C语言的疯狂!",LIGHTBLUE); puts16(120,280,"点击网址: http://www.8623.com 随时欢迎您的到来!",LIGHTRED); getch(); closegraph();} aspnetwuxueyou(Where do you want to go today?): 我要显示的是繁体字,你这种好像只能显示简体字,我试过了。 简体字库可以通过location=(94*(qh-1)+(wh-1))*32L; 计算它的偏移量.而繁体字我不知道怎么计算,比如计算说:“紅”的点阵在文件中的偏移量能否告知? vc2003和vista有冲突? 请教数据库连接池的问题 怎样判断从数据库中查询到的记录值为空 windows自带的三维弹球游戏是不是有源代码? 软件开机界面的编程! 初学遇到的问题,望高手不吝赐教。 怎样向工程中加入文件,而且文件的路径是相对位置? 关于无模式对话框的退出清理问题。 渐进色算法求解 怎样读取大于内存的YUV视频文件? 用ADO访问Excel时的一个奇怪问题,希望高手指点迷津 SDK的DrawDibOpen函数
/******************************************/
/* */
/* 显示16*16和12*12点阵汉字的演示 */
/* */
/* Little Tiger 2003.11.13 */
/* */
/* 需要使用 HZK16,HZK12,ASC16文件 */
/* */
/******************************************/#include<stdio.h>
#include<graphics.h>/* 显示16*16点阵汉字函数,使用HZK16文件,x,y为显示坐标,s为显示字符串,colour为颜色 */
void hanzi16(int x,int y,char *s,int colour)
{
FILE *fp;
char buffer[32];
register i,j,k;
unsigned char qh,wh;
unsigned long location;
if((fp=fopen("hzk16","rb"))==NULL)
{
printf("Can't open hzk16!");
getch();
exit(0);
}
while(*s)
{
qh=*s-0xa0;
wh=*(s+1)-0xa0;
location=(94*(qh-1)+(wh-1))*32L;
fseek(fp,location,SEEK_SET);
fread(buffer,32,1,fp);
for(i=0;i<16;i++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
if(((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
putpixel(x+8*j+k,y+i,colour);
s+=2;
x+=16;
}
fclose(fp);
}/* 显示12*12点阵汉字函数,使用HZK12文件,x,y为显示坐标,s为显示字符串,colour为颜色 */
void hanzi12(int x,int y,char *s,int colour)
{
FILE *fp;
char buffer[24];
register i,j,k;
unsigned char qh,wh;
unsigned long location;
if((fp=fopen("hzk12","rb"))==NULL)
{
printf("Can't open hzk12!");
getch();
}
while(*s)
{
qh=*(s)-0xa0;
wh=*(s+1)-0xa0;
location=(94*(qh-1)+(wh-1))*24L;
fseek(fp,location,SEEK_SET);
fread(buffer,24,1,fp);
for(i=0;i<12;i++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
if((buffer[i*2+j]>>(7-k))&0x1)
putpixel(x+8*j+k,y+i,colour);
s+=2;
x+=12;
}
fclose(fp);
}/* 中英文混合输出函数,使用HZK16,ASC16文件,x,y为显示坐标,s为显示字符串,colour为颜色 */
void puts16(int x,int y,char *s,unsigned char colour)
{
register int i,j,k;
FILE *fpa,*fph;
char buffera[16],bufferh[32];
unsigned char qh,wh;
unsigned long location; fpa=fopen("asc16","rb");
fph=fopen("hzk16","rb");
while(*s)
{
if(*s>0)
{
fseek(fpa,(*s)*16,0);
fread(buffera,1,16,fpa);
for(i=0;i<16;i++)
for(j=0;j<8;j++)
{
if(((buffera[i]>>(7-j))&0x1)!=NULL)
putpixel(j+x,i+y,colour);
}
s++;
x+=8;
}
else
{
qh=*s-0xa0;
wh=*(s+1)-0xa0;
location=(94*(qh-1)+(wh-1))*32L;
fseek(fph,location,SEEK_SET);
fread(bufferh,32,1,fph);
for(i=0;i<16;i++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
if(((bufferh[i*2+j]>>(7-k))&0x1)!=NULL)
putpixel(x+8*j+k,y+i,colour);
s+=2;
x+=16;
}
}
fclose(fpa);
fclose(fph);
}main()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,""); hanzi12(260,160,"疯狂甲虫乐园!",LIGHTCYAN);
hanzi16(246,200,"C语言的疯狂!",LIGHTBLUE);
puts16(120,280,"点击网址: http://www.8623.com 随时欢迎您的到来!",LIGHTRED); getch();
closegraph();
}
我要显示的是繁体字,你这种好像只能显示简体字,我试过了。