點陣字模生成原理與方法

2021-07-28 01:18:29 字數 2113 閱讀 1381

點陣字模生成原理與方法

字模生成原理

本設計中因為使用漢字的點陣顯示,需要提取漢字字模,因此我們首先來了解漢字點陣字模的提取方法。

漢字的點陣字模

是從點陣字型檔檔案

中提取出來的

。例如常用的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 字符集中的所有漢字。現在只要弄清漢字點陣在字型檔檔案中的格式,就可以按照自己的意願去顯示漢字了。下面以hzk16 檔案為例,分析取得漢字點...

8x8點陣字模生成查詢 scratch顯示點陣漢字

什麼是點陣字型 圖中文字模 16 16 點陣 或者說畫素 位 二進位制形式0 1表示點陣資料 字模資訊 十六進製制形式表示 了解了以上資訊,我們就可以根據位 或字模資訊,以打點的形式顯示出點陣文字了。那這個位 或字模資訊從 來?文符太多自己製作就不太現實了,又是一翻搜尋找到一款小工具 通用點陣字型檔...

微控制器控制點陣字元顯示及字模提取原理

微控制器應用經常會用到液晶顯示或者led點陣屏,是用點陣的方式顯示的,要顯示漢字或字元的時候會用到字模,字模就是字在點陣上顯示時對應的編碼。以字模的方式儲存圖形或者文字,每乙個點都需要乙個bit位來儲存,該位為0代表該畫素點不顯示,為1代表顯示。這樣,乙個位元組就可以儲存8個畫素點的顯示情況。一般採...