• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. 不依賴高點陣字庫實現屏幕漢字顯示

        時間:2024-04-27 05:26:39 計算機畢業論文 我要投稿
        • 相關推薦

        不依賴高點陣字庫實現屏幕漢字顯示

        在設計軟件封面或菜單標題時,常需用到放大的漢字顯示。通常采用的方法是一邊從高點陣字庫中讀取漢字的字形碼,一邊加以變換在圖形方式下繪點;但高點陣字庫占有較大存儲空間,例如 :2.13漢字系統中四種字體(宋、仿宋、黑、楷)的40X40點陣字庫共占用近5M字節的硬盤空間。一般漢字操作系統中的漢字顯示都采用16X16點陣字庫(僅占約260K字節);
        而由于硬盤空間的限制,并不是每臺微機上都裝有高點陣字庫。
        如何使漢字放大顯示程序不依賴高點陣字庫而獨立運行?本文提供一種方法,將需要放大顯示的漢字串的字形碼一次性從2.13I高點陣字庫(40X40點陣)讀入一個SUBHZK文件,以后每次顯示放大漢字時只需從該文件讀取字模信息,而SUBHZK比高點陣字庫要小的多。這樣,漢字顯示程序運行時就徹底擺脫了高點陣字庫(只需打開文件SUBHZK),可在西文方式或任何中文方式下運行。
        程序采用Turbo C2.0編寫,漢字放大顯示程序DISPHZ運行時只需將SUBHZK和相應顯示器的圖形驅動程序(如CGA.BGI、EGAVGA.BGI)隨DISPHZ.EXE放在同一目錄下即可。
        須注意的是,40X40點陣字模(字形碼)實際上由40×36點陣組成,其漢字字形碼排列格式為
        @@T5S06100.GIF;圖1@@
        程序清單:
        /*程序READGHZ.C:將需放大顯示的漢字串的字形碼從2.13系統40X40點陣字庫讀入
        文件SUBHZK*/
        #include
        #include
        int openhzk40(int);
        FILE *fp,*fptr; /*定義全局文件指針*/
        char *hzk-table[]={"c:\\213\\hzk40s","c:\\231\\hzk40f",
        "c:\\213\\hzk40h","c:\\213\hzk40k"};
        main()
        {
        unsigned char *string="管理信息系統";
        /*需放大的漢字串*/
        unsigned char inter-code ,zone-code,bit-code;
        int locate,hzk-num,flag=0
        char *p,dot-arrays[180];
        if((fptr=fopen("subhzk","wb"))==NULL){
        printf("Cannot open file\n");
        exit(1);
        } /*打開或創建文件SUBHZK */
        openhzk40(1);
        p=string;
        while(*p)
        {
        inter-code=*p++;
        if(inter-code>0xal)
        if(flag==0)
        {
        zone-code=(inter-code-0xa0)&0x7f;/*漢字區碼*/
        flag=1;
        }
        eles
        {
        bit-code=(inter-code-0xa0)&0x7f;
        /*漢字位碼*/
        flag=0;
        locate=(zone-code-0x10)*94+bit-code-1;
        /*漢字字模地址*/
        fseek(fp,locate*180L,SEEK-SET);
        /*置文件指針于漢字字模地址*/
        fread(dot-arrays,sizeof(dot-arrays),1,fp);
        /*讀漢字字模于數組中*/
        fwrite(dot-arrays,sizeof(dot-arrays),1,fptr);
        /*寫漢字字模到文件*/
        }
        }
        fclose(fp);
        fclose(fptr);
        return 0;
        }
        int openhzk40(int hzk-num)

        /*打開2.13系統40X40點陣字庫文件*/
        {
        if((fp=fopen(hzk-table[hzk-num],"rb"))==NULL)
        {
        cputs("Error on open file");
        getch();
        exit(1);
        }
        return 0;
        }
        /*程序DISPHZ.C:從文件SUBHZK中讀取漢字
        字形碼信息并放大顯示*/
        #include


        #include
        #include
        #define RED 4
        #define grOK 0
        #define STRLEN 6
        /*要顯示的漢字串所含漢字個數*/
        int writehz (int,int,int,int,int,int);
        void init-graph();
        void far restorecr tmode();
        FILE *fp;
        main ()
        {
        init-graph(); /*初始化圖形模式*/
        if((fp=fopen("subhzk","rb"))==NULL){
        printf("Cannot open file/n");
        exit(1);
        }
        writehz(30,30,10,2,2,RED);
        fclose(fp);
        getch();
        restorecr tmode();
        return 0;
        }
        void init-graph()
        {
        int gdriver=DETECT,gmode,errorcode;
        initgraph(&gdriver,&gmode,"");
        errorcode=graphresult();
        if(errorcode!=grOK)
        {
        printf("Graphics error:%s\n",grapherrormsg(errorcode));
        printf("Press any key to halt:");
        getch();
        exit();
        }
        }
        /*漢字字模讀取與放大顯示*/
        int writehz(int x,int y,int z,int x-zoom,int y-zoom,int color)
        {
        int i,j,k,n;
        char dot-arrays[180]; /*定義180字節數組,暫存漢字字模*/
        for(n=0;n{
        fread(dot-arrays,sizeof(dot-arrays),1,fp);
        for(i=0;i<36;i++) /*繪漢字上排(1至72字節所含點陣)*/
        for(j=0,j<2;j++)
        for(k=0;k<8,k++)
        if((dot-arrays[i*2+j]>>(7-k))&1)
        putpixel(x-zoom*(x+i),y-zoom*(y+j*8+k),color);
        for(i=0;i<36;i++) /*繪漢字下排(73至180字節所含點陣);*/
        for(j=0,j<3;j++)
        for(k=0,k<8,k++)
        if((dot-arrays[72+i*3+j]>>(7-k))&1)
        putpixel(x-zoom*(x+i),y-zoom*(y+16+j*8+k),color);
        x=x+36+z; /*移位,準備繪下一漢字*/
        }
        return 0;
        }

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【不依賴高點陣字庫實現屏幕漢字顯示】相關文章:

        利用DVI實現雙屏幕超寬圖像顯示03-18

        YUV轉換RGB顯示的實現03-07

        漢字的動態編碼與顯示方案03-18

        軟件封面特技顯示的語言實現03-28

        單片機系統中的漢字顯示03-18

        嵌入式現場智能顯示系統的設計與實現03-07

        多種數制顯示的匯編語言編程實現03-19

        VGA顯示與TV顯示的區別及轉換03-19

        靜態圖像的直接顯示03-06

        在线咨询
        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 亚洲日韩国产欧美高清v | 日本中文字幕乱码在线高清 | 中文字幕永久在线 | 在线不卡视频V二区三区 | 自拍亚洲中文字幕一区二区 | 亚洲日韩在线视频 |

            不依賴高點陣字庫實現屏幕漢字顯示

            在設計軟件封面或菜單標題時,常需用到放大的漢字顯示。通常采用的方法是一邊從高點陣字庫中讀取漢字的字形碼,一邊加以變換在圖形方式下繪點;但高點陣字庫占有較大存儲空間,例如 :2.13漢字系統中四種字體(宋、仿宋、黑、楷)的40X40點陣字庫共占用近5M字節的硬盤空間。一般漢字操作系統中的漢字顯示都采用16X16點陣字庫(僅占約260K字節);
            而由于硬盤空間的限制,并不是每臺微機上都裝有高點陣字庫。
            如何使漢字放大顯示程序不依賴高點陣字庫而獨立運行?本文提供一種方法,將需要放大顯示的漢字串的字形碼一次性從2.13I高點陣字庫(40X40點陣)讀入一個SUBHZK文件,以后每次顯示放大漢字時只需從該文件讀取字模信息,而SUBHZK比高點陣字庫要小的多。這樣,漢字顯示程序運行時就徹底擺脫了高點陣字庫(只需打開文件SUBHZK),可在西文方式或任何中文方式下運行。
            程序采用Turbo C2.0編寫,漢字放大顯示程序DISPHZ運行時只需將SUBHZK和相應顯示器的圖形驅動程序(如CGA.BGI、EGAVGA.BGI)隨DISPHZ.EXE放在同一目錄下即可。
            須注意的是,40X40點陣字模(字形碼)實際上由40×36點陣組成,其漢字字形碼排列格式為
            @@T5S06100.GIF;圖1@@
            程序清單:
            /*程序READGHZ.C:將需放大顯示的漢字串的字形碼從2.13系統40X40點陣字庫讀入
            文件SUBHZK*/
            #include
            #include
            int openhzk40(int);
            FILE *fp,*fptr; /*定義全局文件指針*/
            char *hzk-table[]={"c:\\213\\hzk40s","c:\\231\\hzk40f",
            "c:\\213\\hzk40h","c:\\213\hzk40k"};
            main()
            {
            unsigned char *string="管理信息系統";
            /*需放大的漢字串*/
            unsigned char inter-code ,zone-code,bit-code;
            int locate,hzk-num,flag=0
            char *p,dot-arrays[180];
            if((fptr=fopen("subhzk","wb"))==NULL){
            printf("Cannot open file\n");
            exit(1);
            } /*打開或創建文件SUBHZK */
            openhzk40(1);
            p=string;
            while(*p)
            {
            inter-code=*p++;
            if(inter-code>0xal)
            if(flag==0)
            {
            zone-code=(inter-code-0xa0)&0x7f;/*漢字區碼*/
            flag=1;
            }
            eles
            {
            bit-code=(inter-code-0xa0)&0x7f;
            /*漢字位碼*/
            flag=0;
            locate=(zone-code-0x10)*94+bit-code-1;
            /*漢字字模地址*/
            fseek(fp,locate*180L,SEEK-SET);
            /*置文件指針于漢字字模地址*/
            fread(dot-arrays,sizeof(dot-arrays),1,fp);
            /*讀漢字字模于數組中*/
            fwrite(dot-arrays,sizeof(dot-arrays),1,fptr);
            /*寫漢字字模到文件*/
            }
            }
            fclose(fp);
            fclose(fptr);
            return 0;
            }
            int openhzk40(int hzk-num)

            /*打開2.13系統40X40點陣字庫文件*/
            {
            if((fp=fopen(hzk-table[hzk-num],"rb"))==NULL)
            {
            cputs("Error on open file");
            getch();
            exit(1);
            }
            return 0;
            }
            /*程序DISPHZ.C:從文件SUBHZK中讀取漢字
            字形碼信息并放大顯示*/
            #include


            #include
            #include
            #define RED 4
            #define grOK 0
            #define STRLEN 6
            /*要顯示的漢字串所含漢字個數*/
            int writehz (int,int,int,int,int,int);
            void init-graph();
            void far restorecr tmode();
            FILE *fp;
            main ()
            {
            init-graph(); /*初始化圖形模式*/
            if((fp=fopen("subhzk","rb"))==NULL){
            printf("Cannot open file/n");
            exit(1);
            }
            writehz(30,30,10,2,2,RED);
            fclose(fp);
            getch();
            restorecr tmode();
            return 0;
            }
            void init-graph()
            {
            int gdriver=DETECT,gmode,errorcode;
            initgraph(&gdriver,&gmode,"");
            errorcode=graphresult();
            if(errorcode!=grOK)
            {
            printf("Graphics error:%s\n",grapherrormsg(errorcode));
            printf("Press any key to halt:");
            getch();
            exit();
            }
            }
            /*漢字字模讀取與放大顯示*/
            int writehz(int x,int y,int z,int x-zoom,int y-zoom,int color)
            {
            int i,j,k,n;
            char dot-arrays[180]; /*定義180字節數組,暫存漢字字模*/
            for(n=0;n{
            fread(dot-arrays,sizeof(dot-arrays),1,fp);
            for(i=0;i<36;i++) /*繪漢字上排(1至72字節所含點陣)*/
            for(j=0,j<2;j++)
            for(k=0;k<8,k++)
            if((dot-arrays[i*2+j]>>(7-k))&1)
            putpixel(x-zoom*(x+i),y-zoom*(y+j*8+k),color);
            for(i=0;i<36;i++) /*繪漢字下排(73至180字節所含點陣);*/
            for(j=0,j<3;j++)
            for(k=0,k<8,k++)
            if((dot-arrays[72+i*3+j]>>(7-k))&1)
            putpixel(x-zoom*(x+i),y-zoom*(y+16+j*8+k),color);
            x=x+36+z; /*移位,準備繪下一漢字*/
            }
            return 0;
            }