有谁操作过字库的,请告知如何打开字库文件!!

xdreamer 2000-02-21 02:28:00
...全文
823 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyzcom 2000-07-12
  • 打赏
  • 举报
回复
int load()
{
showmode=1;char_range=0;
font16hz=fopen("bigch","rb");
if(font16hz==NULL) return(FALSE);
font16en=fopen("bigen","rb");
if(font16en==NULL) return(FALSE);
return(TRUE);
}

void hangeMode(int x,int y)
{
showmode=x;
char_range=y;
}

void disphz(int sx,int sy,int c,int times,unsigned char *s)
{
register i,j;
int zc,bc,rec,k;
unsigned long len;
char buf[32];
for(j=0;j<strlen(s);j++)
{
if((s[j]>160)&&(s[j]<255)&&(s[j+1]>160))
{
zc=(s[j]-0xa1)&0x07f;
bc=(s[j+1]-0xa1)&0x07f;
rec=zc*94+bc;
len=rec*32L;
fseek(font16hz,len,SEEK_SET);
fread(buf,1,32,font16hz);
for(i=0;i<32;i++)
{
for(k=0x80;k>0;k>>=1)
{
if((k&buf[i])==k) putpixel(sx,sy,c);
sx++;
}
if(i&1) {sx-=16;sy++;}
}
j++;
if(showmode) {sx+=char_range+16;sy-=16;}
else sy+=char_range;
delay(times);
}
else
{
len=s[j]*16;
fseek(font16en,len,SEEK_SET);
fread(buf,1,16,font16en);
for(i=0;i<16;i++)
{
for(k=0x80;k>0;k>>=1)
{
if((k&buf[i])==k) putpixel(sx,sy,c);
sx++;
}
sy++;
sx-=8;
}
if(showmode) {sx+=char_range+8;sy-=16;}
else sy+=char_range;
delay(times);
}
}
}

void OnlyLine(int x,int y,int c,int wl,unsigned char *s)
{
register i,j;
unsigned long len;
int zc,bc,rec,k;
i=j=0;
while(*s)
{
if((*s&0x80)&&(*(s+1)&0x80))
{
zc=(*s-0xa1)&0x07f;
bc=(*(s+1)-0xa1)&0x07f;
rec=zc*94+bc;
len=rec*32L;
len+=wl*2;
fseek(font16hz,len,SEEK_SET);
fread(linebuf[i],1,2,font16hz);
linechar[i]=1;
i++; s+=2;
}
else {
len=*s*16;
len+=wl;
fseek(font16en,len,SEEK_SET);
fread(linebuf[i],1,1,font16en);
linechar[i]=0;
i++; s++;
}
}

for(j=0;j<i;j++)
{
if(linechar[j])
{
for(k=0x80;k>0;k>>=1)
{
if((k&linebuf[j][0])==k) putpixel(x,y,c);
x++;
}
for(k=0x80;k>0;k>>=1)
{
if((k&linebuf[j][1])==k) putpixel(x,y,c);
x++;
}
x+=char_range;
}
else {
for(k=0x80;k>0;k>>=1)
{
if((k&linebuf[j][0])==k) putpixel(x,y,c);
x++;
}
x+=char_range;
}
}
}

void LineFade(int x,int y,int c,int times,unsigned char *s)
{
register i;
if(strlen(s)<=1) return ;
for(i=0;i<16;i++)
{
OnlyLine(x,y,c,i,s);
delay(times);
y++;
}
}

void FONT16::unload()
{
fclose(font16hz);
fclose(font16en);
}
csdn2000 2000-03-11
  • 打赏
  • 举报
回复
我好多年写过一个程序CH6.EXE(30多K),可以查看/修改6种点阵字库(8x8,18x6,24x24,32x32,40x40,64x64),功能很强大,需要的话可找我联系.
leexj110 2000-02-28
  • 打赏
  • 举报
回复
打开UCDOS的HZK16,将*p的字符串输出,X,Y为输出时的坐标,COLOR为颜色
unsigned char *p,
int x,int y,
unsigned char color
{
unsigned int i,c1,c2;
unsigned char by[32],by1[16],bc,code[2];
long rec;
FILE *fp;

if((fp=fopen(hzk16name,"rb"))==NULL)
{
printf("Open hzk16 error!\n");
getch();
ErrQuit(1);
}
i=strlen(p);
bc=(color>>4)&0xf;

color&=0xf;
setfillstyle(1,bc);
bar(x,y,x+i*8,y+16);

while ((code[0]=*p++)!='\0')
{
if(code[0] & 0x80)
{
code[1]=*p++;
c1= (code[0]-0xa1);
c2= (code[1]-0xa1);

rec = (c1*94l+(long)c2) * 32l;
fseek(fp,rec,SEEK_SET);
fread(by,1,32,fp);
drawhz16(by,x,y,color);
x+=16;
}
}
fclose(fp);
}


void drawhz16(unsigned char *byte,int x,int y,int color)
{
int i,j,k;

for(i=0;i<16;i++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
if((byte[i*2+j]<<k) & 0x80)
putpixel(x+j*8+k,y+i,color);
}


bbxppc 2000-02-25
  • 打赏
  • 举报
回复
如果是点阵字库,我倒用过。和打开一般的二进制文件没什么区别。如果是显示汉字就应该了解一些汉字的编码知识。比如,汉字一般占两个字节。而每个汉字的点阵是根据这两个字节和汉字的点阵大小在字库文件里定位的。可以找些资料来看看,比如《Turbo C 大全》。
SuperChen 2000-02-21
  • 打赏
  • 举报
回复
我用过 UCDOS 中的字库文件,你是指这一类字库文件么? 和普通二进制文件同样方法操作, 点阵字库比较容易操作, 要根据点阵个数计算所需字码的位置, 读出相应的字节数,
矢量字库要复杂些. 具体如何显示当然是看你的要求了,这是自己的程序需要处理的. 还是找本书来看看吧.
Un1 2000-02-21
  • 打赏
  • 举报
回复
去www.high-logic.com当一个Font Creator试试!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧