huzi00008 发表于 2006-11-21 17:03

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

老师留了一个作业:关于从字模文件读取全部汉字输出在屏幕上 (续):<br>
  <br>
               现在要求不是全部读取,而是特定的指定某个字读出,输出在屏幕上<br>

ba_wang_mao 发表于 2006-11-22 08:41

<P>#include &lt;conio.h&gt;<BR>#include &lt;stdio.h&gt;<BR>/*功能:在屏幕以(x,y)为左上角输出color色的s中-英混合字符串*/<BR>void put_chinese(int x,int y,unsigned char *s,int color)<BR>{<BR>  unsigned char mat[32],i,j,is_hz,can_put,<BR> unsigned long position;<BR> FILE *fp;<BR> <BR> fp=fopen("hzk16","rb");/*打开汉字库文件*/<BR> if (fp==NULL)return;<BR> while(*s!=0) /*开始输出文字循环*/<BR> {<BR>    if(*s&gt;0xa0&amp;&amp;*(s+1)&gt;0xa0    <BR>    {/*若为中文读取中文字模*/<BR>            i=*s-0xa0;/*计算区号*/<BR>            j=*(s+1)-0xa0;/*计算位号*/<BR>            position=(94*(i-1)+(j-1))*32l;/*计算中文字模位置*/<BR>            fseek(fp,position,SEEK_SET);/*移动文件指针到字模位置*/<BR>            fread(mat,32,1,fp);/*读取为中文字模*/  <BR>    }<BR>  /*开始输出字模了,将读取的中文或英文字模显示*/<BR>    for(j=0;j&lt;16;j++)<BR>        for(i=0;i&lt;16;i++)<BR>            if((0x80&gt;&gt;i%8)&amp;mat[2*j+i/8])/*对于字模相应位为1则输出*/<BR>                putpixel(i+x,y+j+(1-is_hz)*4,color);/*将英文字模显示时下移4pixel,这样看起来美观些*/<BR>         x+=18;/*中文间距为18pixel*/<BR>        s+=2;<BR>   }<BR> fclose(fp);<BR>}<BR><BR>void main()<BR>{<BR>   put_chinese(100,200,"中文实例",RED);<BR><BR>}</P>

ba_wang_mao 发表于 2006-11-22 08:43

is_hz=1;

ba_wang_mao 发表于 2006-11-22 08:44

putpixel(i+x,y+j+(1-is_hz)*4,color) 改为 putpixel(i+x,y+j,color)

huzi00008 发表于 2006-11-22 09:12

帮忙看看这个程序有哪些修改的地方(我这的要求是利用svga输出 )<br>
#include &lt;stdio.h&gt;<br>
#include &lt;vga.h&gt;<br>
#define matsize 16<br>
#define h 32<br>
<br>
int main(void)<br>
{<br>
        FILE *f,*p;<br>
        int i,j,k,n,w,z;<br>
        int x=0,y=0;<br>
        char xm[h];<br>
        char * e;<br>
<br>
        unsigned char  a,b;<br>
        if((p=fopen("cclib.16","rb"))==NULL)<br>
        {<br>
                printf("error\n");<br>
                getchar();<br>
                exit(1);<br>
        }<br>
<br>
        if((f=fopen("xm.txt","r"))==NULL)<br>
        {<br>
                printf("error\n");<br>
                getchar();<br>
                exit(1);<br>
        }<br>
<br>
<br>
        char * e=xm[h];<br>
         while(!feof(p))<br>
                fread(e,32,1,p);<br>
        while(!feof(f))<br>
                t=fgetc(f);<br>
<br>
        vga_init();<br>
        vga_setmode(G1024x768x256);<br>
        vga_setcolor(7);<br>
        n=(matsize-1)/8+1;<br>
        for(j=0;j&lt;matsize;j++)<br>
        {       for(i=0;i&lt;n;i++)<br>
               
{       for(k=8;k&gt;0;k--)<br>
{<br>
                              
a=fgetc(e);<br>
                              
if(a%2==1)<br>
                                               
vga_drawpixel(i*8+k+w,j+y);<br>
                              
a=a&gt;&gt;1;<br>
                       
}<br>
                }<br>
        }<br>
        vga_getch();<br>
        vga_clear();<br>
        vga_setcolor(7);<br>
<br>
        vga_setmode(TEXT);<br>
        fclose(p);<br>
        return 0;<br>
}<br>
<br>


页: [1]

编程论坛