hzk16的介紹以及簡單的使用方法

2021-06-23 00:49:28 字數 1525 閱讀 5694

hzk16的介紹以及簡單的使用方法

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中讀取漢字編碼了,剩下的就是檔案操作了。

c語言實現**如下:

void lcd_show_gb2312(unsigned int x, unsigned int y, unsigned char *str,unsigned int p_color, unsigned int b_color)

; // 獲取bitmap

file *hzk;

hzk = fopen(hzk_file, "rb");

if(hzk == null)

fseek(hzk ,offset,seek_set);

fread(hz_buf,32,1,hzk);

for(i = 0; i < 16; i++)

else

}} }

}

在main.c中呼叫lcd_show_gb2312函式示例如下:

lcd_show_gb2312(50,50,"中",red,white);
main.c檔案要用記事本開啟,另存為ansi格式,在用gcc編譯時要批定輸入字符集和可執行檔案字符集,編譯命令如下:

gcc -finput-charset=gbk -fexec-charset=gbk -o test main.c ***.c

hzk16理解和簡單使用

一般我們使用16x16的點陣宋體字庫,所謂16x16,是每乙個漢字在縱 橫各16點的區域內顯示的。不過後來又有了hzk12 hzk24,hzk32和hzk48字型檔及黑體 楷體和隸書字型檔。雖然漢字型檔種類繁多,但都是按照區位的順序排列的。前乙個位元組為該漢字的區號,後乙個位元組為該字的位號。每乙個...

漢字型檔HZK16的簡單介紹

hzk16 字型檔是符合gb2312標準的16 16點陣字型檔,hzk16的gb2312 80支援的漢字有6763個,符號682個。其中一級漢字有3755個,按聲序排列,二級漢字有3008個,按偏旁部首排列。我們在一些應用場合根本用不到這麼多漢字字模,所以在應用時就可以只提取部分字型作 為己用。hz...

基於HZK16的漢字顯示技術

國標漢字字符集 gb2312 80 在漢字作業系統中以漢字型檔的形式提供,並對漢字型檔的結構做了統一規定。漢字型檔的結構如圖 hzk16的gb2312 80支援的漢字有6763個,符號682個。字型檔有94個區,其中一級漢字有3755個,按聲序排列,二級漢字有3008個,按偏旁部首排列。每個區有94...