字模生成原理

2021-06-12 02:45:29 字數 2656 閱讀 7140

漢字的點陣字模是從點陣字型檔檔案中提取出來的。例如常用的

16×16

點陣hzk16

檔案,12×12

點陣hzk12

檔案等等,這些檔案包括了

gb 2312

字符集中的所有漢字。現在只要弄清漢字點陣在字型檔檔案中的格式,就可以按照自己的意願去顯示漢字了。

下面以hzk16

檔案為例,分析取得漢字點陣字模的方法。

hzk16

檔案是按照

gb 2312-80

標準,也就是通常所說的國標碼或區位碼的標準排列的。國標碼分為

94 個區

(section)

,每個區

94 個位

(position

),所以也稱為區位碼。其中01~

09 區為符號、數字區,16~

87 區為漢字區。而10~

15 區、88~

94 區是空白區域。

如何取得漢字的區位碼呢?在計算機處理漢字和

ascii

字元時,使每個

ascii

字元占用

1個位元組,而乙個漢字占用兩個位元組,其值稱為漢字的內碼。其中第乙個位元組的值為區號加上

32(20h)

,第二個位元組的值為位號加上

32(20h)

。為了與

ascii

字元區別開,表示漢字的兩個位元組的最高位都是

1,也就是兩個位元組的值都又加上了

128(80h)

。這樣,通過漢字的內碼,就可以計算出漢字的區位碼。

具體算式如下:

qh=c1-32-128=c1-160 wh=c2-32-128=c2-160

或qh=c1-0xa0 wh=c2-0xa0

qh,wh

為漢字的區號和位號,

c1,c2

為漢字的第一位元組和第二位元組。

根據區號和位號可以得到漢字字模在檔案中的位置:

location=(94*(qh

-1)+(wh

-1))*

乙個點陣字模的位元組數。

那麼乙個點陣字模究竟占用多少位元組數呢?我們來分析一下漢字字模的具體排列方式。

例如下圖中顯示的「漢

」字,使用

16×16

點陣。字模中每一點使用乙個二進位制位

(bit)

表示,如果是

1,則說明此處有點,若是

0,則說明沒有。這樣,乙個

16×16

點陣的漢字總共需要

16*16/8=32

個位元組表示。字模的表示順序為:先從左到右,再從上到下,也就是先畫左上方的

8個點,再是右上方的

8個點,然後是第二行左邊

8個點,右邊

8個點,依此類推,畫滿

16×16

個點。對於其它點陣字型檔檔案,則也是使用類似的方法進行顯示。例如

hzk12

,但是hzk12

檔案的格式有些特別,如果你將它的字模當作

12*12

位計算的話,根本無法正常顯示漢字。因為字型檔設計者為了使用的方便,字模每行的位數均補齊為

8的整數倍,於是實際該字型檔的位長度是

16*12

,每個字模大小為

24位元組,雖然每行都多出了

4位,但這

4位都是

0(不顯示),並不影響顯示效果。

還有ucdos

下的hzk24s

(宋體)、

hzk24k

(楷體)或

hzk24h

(黑體)這些列印字型檔檔案,每個字模占用

24*24/8=72

位元組,不過這類大字模漢字型檔為了列印的方便,將字模都放倒了,所以在顯示時要注意把橫縱方向顛倒過來就可以了。

這樣我們就完全清楚了如何得到漢字的點陣字模,這樣就可以在程式中隨意的顯示漢字了。

5.7.2

字模提取程式

如果在程式中使用的漢字數目不多,也可以不必總是在程式裡帶上幾百

k的字型檔檔案,也許你的程式才只有幾十

k。這樣可以事先將所需要顯示的漢字字模提取出來,放在另乙個檔案裡,按照自己的順序讀取檔案就可以了。

下面的程式說明了具體顯示漢字的方法,以

16×16

漢字為例,使用

hzk16

檔案。#include

#include

/* x,y

為顯示座標,

s為顯示字串,

colour

為顏色*/

void hanzi16(int x,int y,char *s,int colour)

while(*s)

fclose(fp);

}main()

在tc 2.0

下執行上面程式,就在螢幕上列印出你想要顯示的漢字,例如該程式執行後會在螢幕上顯示:我是中國人!

程式中每次將乙個漢字的點陣字模儲存於

buffer[32]

緩衝陣列裡面,因此我們可以程式設計從該緩衝資料組裡面取出對應漢字的點陣模儲存於另的乙個陣列裡面,然後可以通過

pc機串列埠傳送給微控制器,最後顯示在

led點陣顯示屏上。由於時間比較緊,這一步我沒有做出來,希望有人能夠補充完整,在製作過程中我是用了別人已經寫好了的點陣字模提取軟體來提取點陣字模。

點陣字模生成原理與方法

點陣字模生成原理與方法 字模生成原理 本設計中因為使用漢字的點陣顯示,需要提取漢字字模,因此我們首先來了解漢字點陣字模的提取方法。漢字的點陣字模 是從點陣字型檔檔案 中提取出來的 例如常用的16 16點陣hzk16檔案,12 12點陣hzk12檔案等等,這些檔案包括了gb 2312字符集中的所有漢字...

字模的原理和獲取 一

一 什麼是字模 微控制器應用經常會用到液晶顯示模組,是用點陣的方式顯示的,要顯示漢字或字元的時候會用到字模,字模就是字在點陣上顯示時對應的編碼,如圖 1顯示的 正 字,使用16 16點陣。點陣中黃色的點是高亮的,對應於二進位制編碼中的1,綠色的低亮對應於二進位制編碼中的0。如第一行 二進位制編碼應該...

Runtime 字模轉換

nsobject basemodel.h runtime 字模轉換 import inte ce nsobject basemodel instancetype modelwithdic nsdictionary dic nsdictionary arraycontainmodelclass end...