點陣漢字顯示

2021-04-08 18:08:23 字數 2046 閱讀 5755

由於turbo c應用於dos作業系統下,在使用turbo c進行程式設計時,一般情況下只好使用英文進行人機互動。要是想直接用中文介面,就需要另想他法了。

如果使用中文dos系統(如ucdos),則可以解決在字元介面下的漢字顯示問題。也就是說,可以用printf或其他字串函式來輸出漢字。

但是,這樣仍然有一些不方便。必須先啟動中文dos系統,再執行turbo c或編譯好的程式。並且在中文版dos下執行tubor c時,還可能出現一些問題。而對於圖形介面來說,這種辦法也行不通了。

那麼在圖形介面下顯示漢字的問題就迫切需要解決了。既然是圖形介面,只要把漢字當成一幅畫,畫在顯示屏上不就可以了。關鍵在於如何取得漢字的圖形,也就 是漢字的點陣字模呢。其實那些中文版的dos顯示漢字的方式也就是在圖形介面下畫出漢字的,它們已經提供了現成的點陣字型檔檔案。例如常用的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位元組,不過這 類大字模漢字型檔為了列印的方便,將字模都放倒了,所以在顯示時要注意把橫縱方向顛倒過來就可以了。

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

如果在程式中使用的漢字數目不多,也可以不必總是在程式裡帶上幾百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()

點陣漢字顯示

由於turbo c應用於dos作業系統下,在使用turbo c進行程式設計時,一般情況下只好使用英文進行人機互動。要是想直接用中文介面,就需要另想他法了。如果使用中文dos系統 如ucdos 則可以解決在字元介面下的漢字顯示問題。也就是說,可以用printf或其他字串函式來輸出漢字。但是,這樣仍然有...

點陣漢字顯示

陣漢字顯示 目錄 dos下的點陣漢字 漢字的內碼 漢字字模 漢字型檔檔案 列印字型檔檔案和hzk12 文件內容 dos下的點陣漢字 你是否碰到過用啟動盤啟動系統後用dir命令得到一串串莫名其妙的字元?有經驗的朋友會告訴你 那是漢字。漢字?你不禁會問 怎麼乙個我乙個也不認識。但那確確實實是漢字,如果你...

什麼是點陣漢字

所謂乙個字的點陣.其實就是指這個漢字用多少個象素點來描述.每個象素點顯示為什麼顏色,通常情況下,hzk16採用的是16 16點陣,即256個象素點描述乙個漢字.這些點的顏色分為兩種,一種是前景色,一種是顯示為背景色.那麼,關於那些點顯示為前景色,那些點顯示為背景色,是如何得知的呢?可以這樣來考慮,你...