漢字點陣字庫原理

在國標GD2312—80中規定,所有的國標漢字及符號分配在一個94行、94列的方陣中,方陣的每一行稱爲一個“區”,編號爲01區到94區,每一列稱爲一個“位”,編號爲01位到94位,方陣中的每一個漢字和符號所在的區號和位號組合在一起形成的四個阿拉伯數字就是它們的“區位碼”。區位碼的前兩位是它的區號,後兩位是它的位號用區位碼就可以唯一地確定一個漢字或符號,反過來說,任何一個漢字或符號也都對應着一個唯一的區位碼。漢字“母”字的區位碼是3624,表明它在方陣的36區24位,問號“?”的區位碼爲0331,則它在03區3l位。
 
漢字的機內碼是指在計算機中表示一個漢字的編碼。機內碼與區位碼稍有區別。如上所述,漢字區位碼的區碼和位碼的取值均在1~94之間,如直接用區位碼作爲機內碼,就會與基本ASCII碼混淆。爲了避免機內碼與基本ASCII碼的衝突,需要避開基本ASCII碼中的控制碼(00H~1FH),還需與基本ASCII碼中的字符相區別。爲了實現這兩點,可以先在區碼和位碼分別加上20H,在此基礎上再加80H(此處“H”表示前兩位數字爲十六進制數)。經過這些處理,用機內碼錶示一個漢字需要佔兩個字節,分別 稱爲高位字節和低位字節,這兩位字節的機內碼按如下規則表示:
高位字節 = 區碼 + 20H + 80H(或區碼 + A0H)
低位字節 = 位碼 + 20H + 80H(或位碼 + AOH)
由於漢字的區碼與位碼的取值範圍的十六進制數均爲01H~5EH(即十進制的01~94),所以漢字的高位字節與低位字節的取值範圍則爲A1H~FEH(即十進制的161~254)。
例如,漢字“啊”的區位碼爲1601,區碼和位碼分別用十六進制表示即爲1001H,它的機內碼的高位字節爲B0H,低位字節爲A1H,機內碼就是B0A1H。
 
在漢字的點陣字庫中,每個字節的每個位都代表一個漢字的一個點,每個漢字都是由一個矩形的點陣組成,0代表沒有,1代表有點,將01分別用不同顏色畫出,就形成了一個漢字,常用的點陣矩陣有12*12, 14*14, 16*16三種字庫。
字庫根據字節所表示點的不同有分爲橫向矩陣縱向矩陣,目前多數的字庫都是橫向矩陣的存儲方式(用得最多的應該是早期UCDOS字庫)縱向矩陣一般是因爲有某些液晶是採用縱向掃描顯示法,爲了提高顯示速度,於是便把字庫矩陣做成縱向,省得在顯示時還要做矩陣轉換。我們接下去所描述的都是指橫向矩陣字庫。
 
對於16*16的矩陣來說,它所需要的位數共是16*16256個位,每個字節爲8位,因此,每個漢字都需要用256/8=32個字節來表示。
即每兩個字節代表一行的16個點,共需要16行,顯示漢字時,只需一次性讀取32個字節,並將每兩個字節爲一行打印出來,即可形成一個漢字。
點陣結構如下圖所示:

 
第一字節
第二字節
 
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章