我有一个繁体字库文件,怎么从里读出字模呢? 比如说:“紅”的点阵在文件中的偏移量。

解决方案 »

  1.   

    看看这个程序吧
    /******************************************/
    /*                                        */
    /*     显示16*16和12*12点阵汉字的演示     */
    /*                                        */
    /*        Little Tiger  2003.11.13        */
    /*                                        */
    /*     需要使用 HZK16,HZK12,ASC16文件     */
    /*                                        */
    /******************************************/#include<stdio.h>
    #include<graphics.h>/* 显示16*16点阵汉字函数,使用HZK16文件,x,y为显示坐标,s为显示字符串,colour为颜色 */
    void hanzi16(int x,int y,char *s,int colour)
    {
     FILE *fp;
     char buffer[32];
     register i,j,k;
     unsigned char qh,wh;
     unsigned long location;
     if((fp=fopen("hzk16","rb"))==NULL)
     {
      printf("Can't open hzk16!");
      getch();
      exit(0);
     }
     while(*s)
     {
      qh=*s-0xa0;
      wh=*(s+1)-0xa0;
      location=(94*(qh-1)+(wh-1))*32L;
      fseek(fp,location,SEEK_SET);
      fread(buffer,32,1,fp);
      for(i=0;i<16;i++)
       for(j=0;j<2;j++)
        for(k=0;k<8;k++)
         if(((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
          putpixel(x+8*j+k,y+i,colour);
      s+=2;
      x+=16;
     }
     fclose(fp);
    }/* 显示12*12点阵汉字函数,使用HZK12文件,x,y为显示坐标,s为显示字符串,colour为颜色 */
    void hanzi12(int x,int y,char *s,int colour)
    {
     FILE *fp;
     char buffer[24];
     register i,j,k;
     unsigned char qh,wh;
     unsigned long location;
     if((fp=fopen("hzk12","rb"))==NULL)
     {
      printf("Can't open hzk12!");
      getch();
     }
     while(*s)
      {
       qh=*(s)-0xa0;
       wh=*(s+1)-0xa0;
       location=(94*(qh-1)+(wh-1))*24L;
       fseek(fp,location,SEEK_SET);
       fread(buffer,24,1,fp);
       for(i=0;i<12;i++)
        for(j=0;j<2;j++)
         for(k=0;k<8;k++)
          if((buffer[i*2+j]>>(7-k))&0x1)
           putpixel(x+8*j+k,y+i,colour);
       s+=2;
       x+=12;
      }
     fclose(fp);
    }/* 中英文混合输出函数,使用HZK16,ASC16文件,x,y为显示坐标,s为显示字符串,colour为颜色 */
    void puts16(int x,int y,char *s,unsigned char colour)
    {
     register int i,j,k;
     FILE *fpa,*fph;
     char buffera[16],bufferh[32];
     unsigned char qh,wh;
     unsigned long location; fpa=fopen("asc16","rb");
     fph=fopen("hzk16","rb");
     while(*s)
      {
       if(*s>0)
        {
         fseek(fpa,(*s)*16,0);
         fread(buffera,1,16,fpa);
         for(i=0;i<16;i++)
          for(j=0;j<8;j++)
           {
            if(((buffera[i]>>(7-j))&0x1)!=NULL)
            putpixel(j+x,i+y,colour);
           }
         s++;
         x+=8;
        }
       else
        {
         qh=*s-0xa0;
         wh=*(s+1)-0xa0;
         location=(94*(qh-1)+(wh-1))*32L;
         fseek(fph,location,SEEK_SET);
         fread(bufferh,32,1,fph);
         for(i=0;i<16;i++)
          for(j=0;j<2;j++)
           for(k=0;k<8;k++)
            if(((bufferh[i*2+j]>>(7-k))&0x1)!=NULL)
             putpixel(x+8*j+k,y+i,colour);
         s+=2;
         x+=16;
        }
      }
     fclose(fpa);
     fclose(fph);
    }main()
    {
     int gd=DETECT,gm;
     initgraph(&gd,&gm,""); hanzi12(260,160,"疯狂甲虫乐园!",LIGHTCYAN);
     hanzi16(246,200,"C语言的疯狂!",LIGHTBLUE);
     puts16(120,280,"点击网址:  http://www.8623.com  随时欢迎您的到来!",LIGHTRED); getch();
     closegraph();
    }
      

  2.   

    aspnetwuxueyou(Where do you want to go today?):
        我要显示的是繁体字,你这种好像只能显示简体字,我试过了。
      

  3.   

    简体字库可以通过location=(94*(qh-1)+(wh-1))*32L; 计算它的偏移量.而繁体字我不知道怎么计算,比如计算说:“紅”的点阵在文件中的偏移量能否告知?