hzk16 字型檔是符合gb2312標準的16×16點陣字型檔,hzk16的gb2312-80支援的漢字有6763個,
符號682個。其中一級漢字有3755個,按聲序排列,二級漢字有3008個,按偏旁部首排列。
我們在一些應用場合根本用不到這麼多漢字字模,所以在應用時就可以只提取部分字型作
為己用。
hzk16字型檔裡的16×16漢字一共需要256個點來顯示,也就是說需要32個位元組才能達到顯示
乙個普通漢字的目的。
我們知道乙個gb2312漢字是由兩個位元組編碼的,範圍為a1a1~fefe。a1-a9為符號區,b0到
f7為漢字區。每乙個區有94個字元(注意:這只是編碼的許可範圍,不一定都有字型對應,
比如符號區就有很多編碼空白區域)。下面以漢字「我」為例,介紹如何在hzk16檔案中找到
它對應的32個位元組的字模資料。
前面說到乙個漢字佔兩個位元組,這兩個中前乙個位元組為該漢字的區號,後乙個位元組為該字
的 位號。其中,每個區記錄94個漢字,位號為該字在該區中的位置。所以要找到「我」在
hzk16庫中的位置就必須得到它的區碼和位碼。(為了區別使用了區碼和區號,其實是乙個
東西,別被我誤導了)
區碼:區號(漢字的第乙個位元組)-0xa0
(因為漢字編碼是從0xa0區開始的,所以檔案最前面就是從0xa0區開始,要算出相對區碼)
位碼:位號(漢字的第二個位元組)-0xa0
這樣我們就可以得到漢字在hzk16中的絕對偏移位置:
offset=(94*(區碼-1)+(位碼-1))*32
註解:
1、區碼減1是因為陣列是以0為開始而區號位號是以1為開始的
2、(94*(區號-1)+位號-1)是乙個漢字字模占用的位元組數
3、最後乘以32是因為漢字型檔文應從該位置起的32位元組資訊記錄該字的字模資訊(前面提到乙個漢字要有32個位元組顯示)
基於HZK16的漢字顯示技術
國標漢字字符集 gb2312 80 在漢字作業系統中以漢字型檔的形式提供,並對漢字型檔的結構做了統一規定。漢字型檔的結構如圖 hzk16的gb2312 80支援的漢字有6763個,符號682個。字型檔有94個區,其中一級漢字有3755個,按聲序排列,二級漢字有3008個,按偏旁部首排列。每個區有94...
hzk16理解和簡單使用
一般我們使用16x16的點陣宋體字庫,所謂16x16,是每乙個漢字在縱 橫各16點的區域內顯示的。不過後來又有了hzk12 hzk24,hzk32和hzk48字型檔及黑體 楷體和隸書字型檔。雖然漢字型檔種類繁多,但都是按照區位的順序排列的。前乙個位元組為該漢字的區號,後乙個位元組為該字的位號。每乙個...
嵌入式HZK16字型檔顯示
include include include void read hzk16 const unsigned char s,char chs int size 32 unsigned long offset s 0 0xa1 94 s 1 0xa1 size 找出漢字在hzk16中的偏移位置 fse...