不依賴高點陣字型檔實現螢幕漢字顯示

才智咖 人氣:2.98W

在設計軟體封面或選單標題時,常需用到放大的漢字顯示。通常採用的方法是一邊從高點陣字型檔中讀取漢字的字形碼,一邊加以變換在圖形方式下繪點;但高點陣字型檔佔有較大儲存空間,例如 :2.13漢字系統中四種字型(宋、仿宋、黑、楷)的40X40點陣字型檔共佔用近5M位元組的硬碟空間。一般漢字作業系統中的漢字顯示都採用16X16點陣字型檔(僅佔約260K位元組);
而由於硬碟空間的.限制,並不是每臺微機上都裝有高點陣字型檔。
如何使漢字放大顯示程式不依賴高點陣字型檔而獨立執行?本文提供一種方法,將需要放大顯示的漢字串的字形碼一次性從2.13I高點陣字型檔(40X40點陣)讀入一個SUBHZK檔案,以後每次顯示放大漢字時只需從該檔案讀取字模資訊,而SUBHZK比高點陣字型檔要小的多。這樣,漢字顯示程式執行時就徹底擺脫了高點陣字型檔(只需開啟檔案SUBHZK),可在西文方式或任何中文方式下執行。
程式採用Turbo C2.0編寫,漢字放大顯示程式DISPHZ執行時只需將SUBHZK和相應顯示器的圖形驅動程式(如、)隨放在同一目錄下即可。
須注意的是,40X40點陣字模(字形碼)實際上由40×36點陣組成,其漢字字形碼排列格式為
@@T5S06100.GIF;圖1@@
程式清單:
/*程式READGHZ.C:將需放大顯示的漢字串的字形碼從2.13系統40X40點陣字型檔讀入
檔案SUBHZK*/
#include
#include
int openhzk40(int);
FILE *fp,*fptr; /*定義全域性檔案指標*/
char *hzk-table[]={"c:213hzk40s","c:231hzk40f",
"c:213hzk40h","c:213hzk40k"};
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 filen");
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