在計算機(jī)圖形學(xué)中,字符可以用不同的方式表達(dá)和生成。常用的方法有點(diǎn)陣式、矢量式和編碼式。
1.點(diǎn)陣式字符
在點(diǎn)陣式字符庫中,每個字符都定義成一個稱為掩膜的矩陣。矩陣中的元素都是一位二進(jìn)制數(shù),當(dāng)該位為1時,表示字符的筆劃經(jīng)過此位,對應(yīng)于此位的象素應(yīng)置為字符顏色;當(dāng)該位為0時,表示字符的筆劃不經(jīng)過此位,對應(yīng)于此位的象素應(yīng)置為背景色或不改變。
點(diǎn)陣式字符
4.輪廓字型技術(shù)
輪廓字型法采用直線、或者二/
三次Bezier曲線的集合來描述一個字符的輪廓線。輪廓線構(gòu)成一個或若干個封閉的平面區(qū)域。輪廓線定義加上一些指示橫寬、豎寬、基點(diǎn)、基線等的控制信
息,就構(gòu)成了字符的壓縮數(shù)據(jù)。這種控制信息用于保證字符變倍時引起的字符筆劃原來的橫寬/豎寬變大變小時,其寬度在任何點(diǎn)陣情況下永遠(yuǎn)一致。采用適當(dāng)?shù)膮^(qū)
域填充算法,可以從字符的輪廓線定義產(chǎn)生的字符位圖點(diǎn)陣,區(qū)域填充算法可以用硬件實(shí)現(xiàn),也可以用軟件實(shí)現(xiàn)。
當(dāng)對輸出字符的要求較高時(如排版印
刷),需要使用高質(zhì)量的點(diǎn)陣字符。對于GB2312-80所規(guī)定的6763個基本漢字,假設(shè)每個漢字是72X72點(diǎn)陣,那么一個字庫就需要
72X72X6763/8=4.4兆字節(jié)存儲空間;不但如此,在實(shí)際使用時,還需要多種字體(如基本體、宋體、仿宋體、黑體、楷體等),每種字體又需要多
種字號。可見,直接使用點(diǎn)陣字符方法將耗費(fèi)巨大的存儲空間。因此把每種字體、字號的字符都存儲一個對應(yīng)的點(diǎn)陣,在一般情況是不可行的。
解
決這個問題一般采用壓縮技術(shù)。對字型數(shù)據(jù)壓縮后再存儲,使用時,將壓縮的數(shù)據(jù)還原為字符位圖點(diǎn)陣。壓縮方法有多種,最簡單的有黑白段壓縮法,這種方法簡
單,還原快,不失真,但壓縮較差,使用起來也不方便,一般用于低級的文字處理系統(tǒng)中。另一種方法是部件壓縮法。這種方法壓縮比大,缺點(diǎn)是字型質(zhì)量不能保
證。三是輪廓字型法,這種方法壓縮比大,且能保證字符質(zhì)量,是當(dāng)今國際上最流行的一種方法,基本上也被認(rèn)為是符合工業(yè)標(biāo)準(zhǔn)化的方法。
輪
廓字型法采用直線、或者二/三次Bezier曲線的集合來描述一個字符的輪廓線。輪廓線構(gòu)成一個或若干個封閉的平面區(qū)域。輪廓線定義加上一些指示橫寬、豎
寬、基點(diǎn)、基線等的控制信息,就構(gòu)成了字符的壓縮數(shù)據(jù)。這種控制信息用于保證字符變倍時引起的字符筆劃原來的橫寬/豎寬變大變小時,其寬度在任何點(diǎn)陣情況
下永遠(yuǎn)一致。采用適當(dāng)?shù)膮^(qū)域填充算法,可以從字符的輪廓線定義產(chǎn)生的字符位圖點(diǎn)陣,區(qū)域填充算法可以用硬件實(shí)現(xiàn),也可以用軟件實(shí)現(xiàn)。
由美國
Apple和Microsoft公司聯(lián)合開發(fā)的TrueType字型技術(shù)就是一種輪廓字型技術(shù),已被用于為Windows中文版生成漢字字庫。當(dāng)前占領(lǐng)主
要的電子印刷市場的我國北大方正和華光電子印刷系統(tǒng),用的字型技術(shù)是漢字字型輪廓矢量法。這種方法能夠準(zhǔn)確地把字符的信息描述下來,保證了還原的字符質(zhì)
量,又對字型數(shù)據(jù)進(jìn)行了大量的壓縮。調(diào)用字符時,可以任意地放大、縮小或進(jìn)行花樣變化,基本上能滿足電子印刷中字型質(zhì)量的要求。輪廓字型技術(shù)有著廣泛的應(yīng)
用。到目前為止在印刷行業(yè)中使用最多,隨著Ms-Windows的大量使用,在CAD、圖形學(xué)等領(lǐng)域也將變得越來越重要。
點(diǎn)陣式字符將字符表示為一個矩形點(diǎn)陣,由點(diǎn)陣中點(diǎn)的不同值表達(dá)字符的形狀。常用的點(diǎn)陣大小有5x7、7x9、8x8、16x16等等。圖2.4.1(a)所示的字母“P”的點(diǎn)陣式表示例子。在這種8? 8網(wǎng)格中的字形比較粗糙,但當(dāng)點(diǎn)陣變大時,字型可以做得非常漂亮。
使用點(diǎn)陣式字符時,需將字庫中的矩形點(diǎn)陣拷貝到buffer中指定的單元中去。在拷貝過程中,可以施加變換,以獲得簡單的變化。圖2.4.1(b)~(d)列出了P字母原型的一些變化例子。相應(yīng)的變換算法是:
(a)
(b)
(c) (d)

圖2.4.1 點(diǎn)陣式字符及其變化
圖(b)變成粗體字。算法是:當(dāng)字符原型中每個象素被寫入幀緩存寄存器的指定位置xi, yi時,同時被寫入xi+1, yi。
圖(c)旋轉(zhuǎn)90? 。算法是:把字符原型中每個象素的x, y坐標(biāo)彼此交換,并使y值改變符號后,再寫入幀緩存寄存器的指定位置。
圖(d)斜體字。算法是:從底到頂逐行拷貝字符,每隔n行,左移一單元。
此外,還可以對點(diǎn)陣式字符作比例縮放等其他一些簡單的變換。但是對點(diǎn)陣式字符作任意角度的旋轉(zhuǎn)等變換,是比較困難的操作。
由于光柵掃描顯示器的普遍使用,點(diǎn)陣式字符表示已經(jīng)成為一種字符表示的主要形式。從字庫中讀出原字型,經(jīng)過變換拷貝到buffer中去的操作,經(jīng)常制成專門的硬件來完成。這就大大加快了字符生成的速度。
2.矢量式字符
在筆式繪圖儀上采用矢量型字符比較合適,矢量型字符采用矢量代碼序列表示字符的各個筆劃。輸出一個字符時,系統(tǒng)中字符處理器解釋該字符的每個矢量代碼,輸出對應(yīng)的矢量,達(dá)到產(chǎn)生字符的目的。
矢量式字符
矢量式字符將字符表達(dá)為一個點(diǎn)坐標(biāo)的序列,相鄰兩點(diǎn)表示一條矢量,字符的形狀便由矢量序列刻劃。圖2.4.2示出用矢量式表示的字符“B”。“B”是由頂點(diǎn)序列{a, b, c, d, e, f, e, g, h, I, j, k ,a, l}的坐標(biāo)表達(dá)。
調(diào)用矢量式字符的過程相當(dāng)于輸出一個polyline。由于矢量式字符具有和圖形相一致的數(shù)據(jù)結(jié)構(gòu),因而可以接受任何對于圖形的操作,如放大、旋轉(zhuǎn),甚至透視。而且,矢量式字符不僅可用于顯示,也可用于繪圖機(jī)輸出。

圖2.4.2 矢量式表示字符“B”
3.方向編碼式字符
方向編碼式字符用有限的若干種方向編碼來表達(dá)一個字符,常用的如8方向編碼。方向編碼既可用于字符的顯示,也可用于字符的繪圖機(jī)輸出。
方向編碼式字符用有限的若干種方向編碼來表達(dá)一個字符,常用的如8方向編碼。圖2.4.3示出8個方向的編碼為0~7,其中編碼為偶數(shù)和0的固定長度為1,編碼為奇數(shù)的固定長度為
。
一個字符就可以表示為一連串方向碼。圖2.4.4(a)示出字母“B”的方向矢量構(gòu)成。這樣,“B”就表示為8方向編碼:
{000012344400012344440666666}。方向編碼式字符很容易被填入幀緩存寄存器中予以顯示(圖2.4.4(b)),方向編碼所占
的空間比較小,它也能接受一些特定的變換操作,如按比例在x和y兩個方向放大或縮小以及以45? 角為單位的旋轉(zhuǎn),但難以進(jìn)行任意角度的旋轉(zhuǎn)。

方向編碼既可用于字符的顯示,也可用于字符的繪圖機(jī)輸出。