社区
C语言
帖子详情
有谁操作过字库的,请告知如何打开字库文件!!
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试试!
LINUX系统管理白皮书
告知
UUCP:sys文件 108 11.3.3 设备:端口文件 110 11.3.4 如何拨号:拨号文件 111 11.3.5 TCP上的UUCP 112 11.3.6 直接连接的使用 112 11.4 UUCP的注意事项:调节权限 112 11.4.1 命令执行 112 11.4.2 文件...
FFmpeg4.3开发系列之八:SDL2.0小白入门
扩展库的应用:SDL2_image,SDL2_mixer,SDL2_ttf(图像、音频、
字库
) 4.官方案例实战:亲手练习官方推荐的几个案例,认真分析总结。 梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章