1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      圖形模式下的漢字顯示

      更新時間: 2007-06-01 10:06:00來源: 粵嵌教育瀏覽量:726


        我們在編寫一些應(yīng)用軟件時,為了使軟件更為通俗淺顯、易學(xué)易用,具備漢字的用戶界面是必不可少的條件。在文本模式下,只要有漢字操作系統(tǒng)的支持,顯示漢字是不成問題的。只要用printf或cprintf就可以了。

        #include void main()
        {
        printf("我正在學(xué)習(xí)C語言!");
        }

        在圖形模式下顯示漢字就稍稍麻煩些??尚业氖怯泻芏嗳藦氖逻@一問題的研究,并開發(fā)了一些用于漢字顯示的函數(shù)。這些函數(shù)不需要漢字系統(tǒng)的支持,但用到其中的字庫文件。如UCDOS的HZK16。

        漢字顯示的步是打開字庫文件。

        函數(shù): int OpenHz(const char *Hz16Path); 功能:打開字庫文件Hz16Pathint handle; /*打開的字庫文件指針*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打開字庫文件后,就可以用下面介紹的函數(shù)顯示16點陣的漢字。

        函數(shù): int WrtHz16(int x,int y,int z,int color,char *p); 功能:在(x,y)用color顏色顯示漢字串p,漢字之間的空格數(shù)為z。intWrtHz16(int x, int y,int z,int color,char *p)
      {
      unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
      int rec,i1,i2,i3; /*z:space between;*/
      long l; /*color:txt color*/
      char by[32]; /*p:HZ str*/
      if( handle<0 ) return -1; while((i=*p++)!=0){
      if(i>0xa1)
      if(f==0){
      c1=(i-0xa1)&0x07f;
      f=1;
      }
      else{
      c2=(i-0xa1)&0x07f;
      f=0;
      rec=c1*94+c2;
      l=rec*32L;
      lseek(handle,l,SEEK_SET);
      read(handle,by,32);
      for(i1=0;i1<16;i1++)
      for(i2=0;i2<2;i2++)
      for(i3=0;i3<8;i3++)
      if(GetBit(by[i1*2+i2],7-i3))
      putpixel(x+i2*8+i3,y+i1,color);
      x=x+z+16;
      }
      }
      return(x);
      }

      函數(shù)GetBit定義如下:
        函數(shù): int GetBit(unsigned char c,int n); 功能:取得漢字的點陣數(shù)據(jù)。
      int GetBit(unsigned char c,int n)
      {
      return((c>>n)&1);
      }
      漢字顯示結(jié)束,應(yīng)該關(guān)閉字庫文件。
      void CloseHz(void)
      {
      close( handle );
      }
      #include "\Caic\Include\Hz.h"
      #include
      #include const char* Hz16Path = "\\UCDOS\\Hzk16.";
      const char* HzStr = "苦丁香C語言輔助學(xué)習(xí)軟件";
      void main(){
      int gr=DETECT,gm;
      initgraph(&gr,&gm,"\\Caic\\Bgi");
      OpenHz( Hz16Path );
      Wrt16Hz(20,20,4,RED,HzStr);
      CloseHz();
      getch();
      closegraph();
      }顯示24點陣及放大漢字

        下面探討一下如何顯示24點陣及放大漢字。24點陣字庫也可在任意一種漢字系統(tǒng)中找到。如UCDOS的HZK24S。
      函數(shù): int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:顯示24點陣及放大漢字。
      int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
      {
      unsigned int i,c1,c2,f=0; /*z: 漢字字符間的空格*/
      int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
      long l; /*color:漢字顏色*/
      char by[72]; /*m: x 方向的放大倍數(shù)*/
      /*n: y 方向的放大倍數(shù)*/
      if( handle<0 ) return -1; /*p: 顯示漢字串*/ while((i=*p++)!=0){
      if(i>0xa1)
      if(f==0){
      c1=(i-0xa1)&0x7f;
      f=1;
      }
      else{
      c2=(i-0xa1)&0x7f;
      f=0;
      rec=(c1-15)*94+c2;
      l=rec*72L;
      lseek(handle,l,SEEK_SET);
      read(handle,by,72);
      for(i1=0;i1<24*m;i1=i1+m)
      for(i4=0;i4 for(i2=0;i2<=2;i2++)
      for(i3=0;i3<8;i3++)
      if(GetBit(by[i1/m*3+i2],7-i3))
      for(i5=0;i5 putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
      x=x+24*m+z;
      }
      }
      return(x);
      } 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
      #include
      #include const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
      const char* HzStr = "苦丁香C語言輔助學(xué)習(xí)軟件";
      void main(){
      int gr=DETECT,gm;
      initgraph(&gr,gm,"\\Caic\\Bgi");
      OpenHz( Hz24Path );
      Wrt24Hz(20,20, /*先是在(x,y)*/
      4, /*漢字間的空格為4*/
      RED, /*用紅色顯示*/
      2, /*x 方向放大2倍*/
      4, /*y 方向放大4倍*/
      HzStr); /*顯示字符串*/
      CloseHz();
      getch();
      closegraph();
      }

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 天天摸天天碰天天添中文字幕 | 中文字幕在线精品 | 日本亚洲欧美高清专区vr专区 | 视频区国产亚洲.欧美 | 亚洲一区二区中文字 | 制服丝袜在线视频 |