什么是點陣漢字 發(fā)表時間:2007-3-17 14:30:27 天氣狀況:
心情指數(shù):
瀏覽次數(shù):116所謂一個字的點陣. 其實就是指這個漢字用多少個象素點來描述. 每個象素點顯示為什么顏色, 通常情況下, HZK16采用的是16*16點陣, 即256個象素點描述一個漢字.
這些點的顏色分為兩種, 一種是前景色, 一種是顯示為背景色.
那么,關(guān)于那些點顯示為前景色, 那些點顯示為背景色, 是如何得知的呢??
可以這樣來考慮, 你在紙上比較正正方方的寫一個規(guī)則的楷字, 然后在這個字的從上到下,左到右, 分別畫十七條直線, 那么這
個字就被放置于一個16*16的方格之內(nèi), 這樣我們就可以很明顯的看出, 16*16的方格內(nèi)的具體哪些點有筆劃經(jīng)過, 有筆劃經(jīng)過與沒筆化經(jīng)過的即就是應該被分別填充上前景色與背景色的點.
現(xiàn)在,找到了一個漢字的點陣, 那么還須要用數(shù)據(jù)來記錄點陣的信息, 通常情況下, 我們會用32個字節(jié)來表示16*16點陣的漢字,
即每一行用二個字節(jié)來記錄十六個象素點的色色彩情況, 0表示背景色, 1表示前景色.16行其須要32個字節(jié).點陣漢字的原理同時也決定了它的缺點, 他不具務放大特性, 因為它的顯示是基于被定死的點陣, 放大后,會產(chǎn)生明顯的鋸齒,非常的難看, 當然, 可以進行一些光滑處理, 但基本上沒有多在的改觀.但點陣漢字簡易, 對于復雜漢字,它比矢量顯示漢字法更快帶.矢量顯示是基于記錄漢字的筆化的. 對于簡單的漢字它比較占優(yōu)勢, 容易放大處理. 但對于復雜的漢字, 表示起來,則筆化太多..復雜.
二. 關(guān)于字庫的建立及其原理.
現(xiàn)在講完了漢字點陣. 也說了一個漢字點陣的存放方式, 但具體的點陣如何存放, 讀者也應該了解.
通常情況下, 一般的DOS下的程序都會提供一個漢字庫, 這樣在脫離漢字平臺(如UCDO)的支持下也可以進行漢字顯示,但是這樣會存一個問題, 就是如果每個DOS下的程序員都這么做的話, 就會造成一定的磁盤空間浪費.所以有的DOS下的程序,針對自己所需要的漢字, 就會定制自己的小型字庫, 那么字庫的制作到底應該如何進行呢?下面我們將就這個問題進行一些基本的討論.
眾所周知,一個ASCII字符占一個字節(jié),它的數(shù)值從0到255,那么漢字字符將如何與ASCII字符區(qū)別開來呢?實際上,仔細觀察ASCII字符表,從第161(即0xa1)個字符開始,后面的字符并不經(jīng)常為E文所使用。充分利用這一特性,將161-255之間的數(shù)值空間作為漢字的標識碼。既然255-161 =94不能滿足漢字容量的要求,就將每兩個字符并在一塊(即一個漢字占兩個字節(jié)),顯然,94* 94 =8836基本上已經(jīng)滿足了常用漢字個數(shù)的要求。
從以上的討論可以知道, 用二個字節(jié)來表示一個漢字, 其原因就是上面說的, 這個就是我們常說的漢字機內(nèi)碼, 一個漢字的機內(nèi)碼是由值都大于0xa1的值組成的.
說完機內(nèi)碼, 有的朋友可能就會問題, 機內(nèi)碼與建立漢字字庫有什么關(guān)系呢??
我們常見的標準的漢字字庫HZX16(點陣16*16),HZK24(24*24)兩種.由上面的討論我們得知,一個漢字點陣須要256個象素點陣來表示, 我們采用一個字節(jié)的8位來表示八個象素, 其須32個字節(jié);字庫中要存放的是所有常用的漢字的二進制點陣數(shù)據(jù), 它的存放是有序的, 下面我們說一下這個順序:
首先.對于"我"字來說, 它的機內(nèi)碼是0xce,0xd2; 機內(nèi)碼每個字節(jié)均從0xa1開始, 那么我們已經(jīng)采用的建立點陣字在庫中的索引方法是:
將整個字庫里面的漢字是94*94的二維數(shù)組, 要找任意一個漢字的點陣, 就須要知道這個漢字在這個二維數(shù)組當中的X維與Y維.
x維 = (機內(nèi)碼字節(jié)1-0xa1) & 0x7f;
y維 = (機內(nèi)碼字節(jié)2-0xa1) & 0x7f;
求漢字在X,Y維后, 那么按照每個漢字占用32個字節(jié), 則可以得出漢字相對于字庫頭的偏移是 offset = (x*94 + y)*32;
其實,X與Y就是漢字的區(qū)位碼, 漢字的區(qū)位碼是從0-94的. 但實際上只用了16-87..
其中一級漢字在16-55..二級漢字在56-87.是按照一定的規(guī)則來確定區(qū)位碼的.對于一級漢字.是按拼音首字母級筆劃.二級漢字是按部首來的.我特意生了一個漢字的區(qū)痊碼,機內(nèi)碼.在字庫中偏移的文件..大家可以下載來看一下. 可以知道:
啊-------------區(qū)位碼(x = 15, y = 0); offset=b040; 機內(nèi)碼:(0xb0,0xa1);
所以漢字的區(qū)內(nèi)碼,機內(nèi)碼,偏移的信息,請下載這個文件查看.
http://www.macro-tax.com/home/ucgui/HZK_info.rar其中,區(qū)位碼(x=0-14)與(88-94)都是沒有對應漢字的.字庫中實際的對應漢字點陣字數(shù)為94*72=6768個漢字.
實際上, 一個字庫中有前16*32個字節(jié)沒有表示具體的漢字的, 在字庫里被用來表示什么東西沒有什么具體的要求, 如果說你自己要做一個字庫.那么這一段你可以自己發(fā)揮, 填充為一個中文的符號,笑臉,特別文字什么的.這些沒有具體的要求.
同理.對于(88---94)*32, 你也可以自己發(fā)揮. 然后告知別人如何使用,因為這個沒有標準, 所以一定要有特別的說明,別人才可可以使用.
在一般的HZK16當中, 最前16*32個節(jié)有表示兩個大小的"A"及兩個感嘆號, 一個在圓內(nèi)的"帥"字..大家可以仔細看一下,其它幾個沒作特別使用.