注册 登录
编程论坛 C图形专区

[求助]如何从字模中读取特定的汉字??

huzi00008 发布于 2006-11-21 17:03, 1112 次点击
老师留了一个作业:关于从字模文件读取全部汉字输出在屏幕上 (续):

现在要求不是全部读取,而是特定的指定某个字读出,输出在屏幕上
4 回复
#2
ba_wang_mao2006-11-22 08:41

#include <conio.h>
#include <stdio.h>
/*功能:在屏幕以(x,y)为左上角输出color色的s中-英混合字符串*/
void put_chinese(int x,int y,unsigned char *s,int color)
{
unsigned char mat[32],i,j,is_hz,can_put,
unsigned long position;
FILE *fp;

fp=fopen("hzk16","rb");/*打开汉字库文件*/
if (fp==NULL)return;
while(*s!=0) /*开始输出文字循环*/
{
if(*s>0xa0&&*(s+1)>0xa0
{/*若为中文读取中文字模*/
i=*s-0xa0;/*计算区号*/
j=*(s+1)-0xa0;/*计算位号*/
position=(94*(i-1)+(j-1))*32l;/*计算中文字模位置*/
fseek(fp,position,SEEK_SET);/*移动文件指针到字模位置*/
fread(mat,32,1,fp);/*读取为中文字模*/
}
/*开始输出字模了,将读取的中文或英文字模显示*/
for(j=0;j<16;j++)
for(i=0;i<16;i++)
if((0x80>>i%8)&mat[2*j+i/8])/*对于字模相应位为1则输出*/
putpixel(i+x,y+j+(1-is_hz)*4,color);/*将英文字模显示时下移4pixel,这样看起来美观些*/
x+=18;/*中文间距为18pixel*/
s+=2;
}
fclose(fp);
}

void main()
{
put_chinese(100,200,"中文实例",RED);

}

#3
ba_wang_mao2006-11-22 08:43
is_hz=1;
#4
ba_wang_mao2006-11-22 08:44
putpixel(i+x,y+j+(1-is_hz)*4,color) 改为 putpixel(i+x,y+j,color)
#5
huzi000082006-11-22 09:12
帮忙看看这个程序有哪些修改的地方(我这的要求是利用svga输出 )
#include <stdio.h>
#include <vga.h>
#define matsize 16
#define h 32

int main(void)
{
FILE *f,*p;
int i,j,k,n,w,z;
int x=0,y=0;
char xm[h];
char * e;

unsigned char a,b;
if((p=fopen("cclib.16","rb"))==NULL)
{
printf("error\n");
getchar();
exit(1);
}

if((f=fopen("xm.txt","r"))==NULL)
{
printf("error\n");
getchar();
exit(1);
}


char * e=xm[h];
while(!feof(p))
fread(e,32,1,p);
while(!feof(f))
t=fgetc(f);

vga_init();
vga_setmode(G1024x768x256);
vga_setcolor(7);
n=(matsize-1)/8+1;
for(j=0;j<matsize;j++)
{ for(i=0;i<n;i++)
{ for(k=8;k>0;k--)
{
a=fgetc(e);
if(a%2==1)
vga_drawpixel(i*8+k+w,j+y);
a=a>>1;
}
}
}
vga_getch();
vga_clear();
vga_setcolor(7);

vga_setmode(TEXT);
fclose(p);
return 0;
}

1