显示中文点阵字体的问题

Dai_Weis 2003-12-30 09:36:34
ucdos 16点阵字库,在显示的时候,例如第2005个汉字,下半部分全是白框,这种情况还有很多,看源程序:
#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <graphics.h>
#include <dos.h>
#include <string.h>;

void main()
{
int gd, gm, i, k, m, x, y;
FILE *fr, *fw;
unsigned long ln;
unsigned char ch, hz[33];
ln = 2005;
clrscr();
ch = 'A';
fr = fopen("chs16.fon", "r");
detectgraph(DETECT, &gm);
initgraph(DETECT, &gm, "");
while (ch != 0x1b)
{
cleardevice();
fseek(fr, 32 * ln, SEEK_SET);
for (i = 0; i < 32; i++)
{
hz[i] = fgetc(fr);
}
x = y = 200;
for (i = 0; i < 32; i += 2)
{
for (k = 0; k < 16; k++)
{
if (k < 8)
{
ch = hz[i];
ch = ch >> (7 - k);
ch &= 0x1;
if (ch == 0x1)
{
putpixel(x + k, y, 15);
}
}
else
{
ch = hz[i + 1];
ch = ch >> (15 - k);
ch &= 0x1;
if (ch == 0x1)
{
putpixel(x + k, y, 15);
}
}
}
y += 1;
}
ch = getch();
ln++;
}
fclose(fr);
closegraph();
}
多谢指点。
...全文
141 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nobush 2003-12-30
  • 打赏
  • 举报
回复
改得面目全非之后才发现只要以二进制打开文件就行了。 ……
#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <graphics.h>
#include <dos.h>
#include <string.h>;

void main()
{
int gd, gm, i, k,j, m, x, y;
FILE *fr, *fw;
unsigned long ln;
char ch, hz[32];
ln =2004;
clrscr();
ch = 'A';
fr = fopen("c:\\ucdos\\hzk16", "rb");
detectgraph(DETECT, &gm);
initgraph(DETECT, &gm, "");
while (ch != 0x1b)
{
cleardevice();
fseek(fr, 32 * ln, SEEK_SET);
fread(hz,32,1,fr);
x = y = 200;
for (i = 0; i < 16; i ++)
for (j = 0; j < 2; j++)
for (k=0;k<8;k++)
{ch = hz[2*i+j];
ch >>= (7 - k);

if (ch &= 1)
putpixel(x+j*8+k, y+i, 15);
}


ch = getch();
ln++;
}
fclose(fr);
closegraph();
}
Dai_Weis 2003-12-30
  • 打赏
  • 举报
回复
up

69,371

社区成员

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

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