一般我們使用16x16的點陣宋體字庫,所謂16x16,是每乙個漢字在縱、橫各16點的區域內顯示的。不過後來又有了hzk12、hzk24,hzk32和hzk48字型檔及黑體、楷體和隸書字型檔。雖然漢字型檔種類繁多,但都是按照區位的順序排列的。前乙個位元組為該漢字的區號,後乙個位元組為該字的位號。每乙個區記錄94個漢字,位號則為該字在該區中的位置。
區號,位號
因此,漢字在漢字型檔中的具體位置計算公式為:94*(區號-1)+位號-1。減1是因為陣列是以0為開始而區號位號是以1為開始的。這僅為以漢字為單位該漢字在漢字型檔中的位置,那麼,如何得到以位元組為單位得到該漢字在漢字型檔中的位置呢?只需乘上乙個漢字字模占用的位元組數即可,即:(94*(區號-1)+位號-1)乙個漢字字模占用位元組數,而按每種漢字型檔的漢字大小不同又會得到不同的結果。以1616點陣字型檔為例,計算公式則為:(94*(區號-1)+(位號-1))*32。漢字型檔文該從該位置起的32位元組資訊即記錄了該字的字模資訊。
示例**:
// an highlighted block
#include
#include
void
disp_hzk16
(vooid)
;// 要讀出的字元
int i,j,k;
char a =0;
qh = inclode[0]
-0xa0
;//區號
wh = inclode[1]
-0xa0
;//位號
offset =(94
*(qh -1)
+(wh -1)
)*32;
printf
("輸出的16位漢字,區號,位號\n");
putchar
(inclode[0]
);putchar
(inclode[1]
);putchar
(',');
printf
("%d,%d\n"
,qh,wh);if
((fp =
fopen
("hzk16"
,"rb"))
==null
)fseek
(fp,offset,
seek_set);
fread
(mat,32,
1,fp)
;fclose
(fp)
;for
(i=0
; i<
16; i++
) a +=8;
} a =0;
}for
(i=0
; i<
16; i++
)printf
("\n");
}printf
("\n");
}int main
(int argc, char *ar**)
漢字型檔HZK16的簡單介紹
hzk16 字型檔是符合gb2312標準的16 16點陣字型檔,hzk16的gb2312 80支援的漢字有6763個,符號682個。其中一級漢字有3755個,按聲序排列,二級漢字有3008個,按偏旁部首排列。我們在一些應用場合根本用不到這麼多漢字字模,所以在應用時就可以只提取部分字型作 為己用。hz...
hzk16的介紹以及簡單的使用方法
hzk16的介紹以及簡單的使用方法 hzk16 字型檔是符合gb2312標準的16 16點陣字型檔,hzk16的gb2312 80支援的漢字有6763個,符號682個。其中一級漢字有3755個,按聲序排列,二級漢字有3008個,按偏旁部首排列。我們在一些應用場合根本用不到這麼多漢字字模,所以在應用時...
基於HZK16的漢字顯示技術
國標漢字字符集 gb2312 80 在漢字作業系統中以漢字型檔的形式提供,並對漢字型檔的結構做了統一規定。漢字型檔的結構如圖 hzk16的gb2312 80支援的漢字有6763個,符號682個。字型檔有94個區,其中一級漢字有3755個,按聲序排列,二級漢字有3008個,按偏旁部首排列。每個區有94...