字符的表示與輸出_第1頁
字符的表示與輸出_第2頁
字符的表示與輸出_第3頁
字符的表示與輸出_第4頁
字符的表示與輸出_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、2.4 字符的表示與輸出常用的字符有:ASCII碼,漢字字符, 其它字符, 其它工程專用符號(hào)。字符庫分為矢量型和點(diǎn)陣型;矢量型字符矢量型字符庫采用矢量代碼序列表示字符的各個(gè)筆畫;點(diǎn)陣字符 每個(gè)字符定義為稱為字符掩膜的矩陣,其中的每個(gè)元素為一位二進(jìn)制數(shù),為1表示字符的筆畫經(jīng)過此位,該象素置為字符顏色;若為0,表示字符的筆畫不經(jīng)過此位,該象素置為背景顏色。 矢量字符 一個(gè)字符由構(gòu)成它的筆畫組成,每一筆畫由其兩端確定;每一端點(diǎn),保存它的坐標(biāo)值和由前一端點(diǎn)到此端點(diǎn)是否連線的標(biāo)志即可;表示一個(gè)矢量字符僅僅需要所有端點(diǎn)的坐標(biāo)信息及是否連線標(biāo)志;形(字)的定義:,,0其中字節(jié)中包含了矢量長度和方向兩種信息;

2、矢量字符的顯示:首先檢索表示該字符的數(shù)據(jù),然后取出端點(diǎn)坐標(biāo),幾何轉(zhuǎn)換,根據(jù)各端點(diǎn)的標(biāo)志進(jìn)行顯示;曲線表示字符; 矢量式字符 矢量式字符將字符表達(dá)為點(diǎn)坐標(biāo)的序列,相鄰兩點(diǎn)表示一條矢量,字符的形狀便由矢量序列刻畫。 圖示出用矢量式表示的字符“B”。“B”是由頂點(diǎn)序列a, b, c, d, e, f, e, g, h, i, j, k,j, a, l的坐標(biāo)表達(dá)。圖 矢量式表示字符“B” 方向編碼式字符 方向編碼式字符用有限的若干種方向編碼來表達(dá)一個(gè)字符。圖1示出8個(gè)方向的編碼為07。圖2 (a)示出字母“B”的方向矢量構(gòu)成。這樣,“B”就表示為8方向編碼00001234440001234444066

3、66。 方向編碼式字符很容易被填入幀暫存寄存器中予以顯示(圖 2 (b),方向編碼所占的空間比較小,它也能接受一些特定的變換操作。圖1 字符的8方向編碼 圖2 方向編碼式字符的實(shí)例點(diǎn)陣字符 點(diǎn)陣字符是由一個(gè)位圖表示的,保存字符就是保存表示它的位圖;點(diǎn)陣字符的顯示:首先從字庫中將它的位圖檢索出來,然后將檢索得到的位圖寫到幀緩存中,進(jìn)行顯示。 使用點(diǎn)陣式字符時(shí),需將字庫中的矩形點(diǎn)陣復(fù)制到緩沖器中指定的單元中去。在復(fù)制過程中,可以施加變換,以獲得簡單的變化。作任意角度的旋轉(zhuǎn)等復(fù)雜變換,比較困難。圖2.11(b)(d)列出了以字母P為原型的一些變化例子。圖2.11 點(diǎn)陣式字符及其變化 當(dāng)對(duì)輸出字符的要

4、求較高時(shí)(如排版印刷),需要使用高質(zhì)量的點(diǎn)陣字符。對(duì)于GB2312-80所規(guī)定的6763個(gè)基本漢字,假設(shè)每個(gè)漢字是72X72點(diǎn)陣,那么一個(gè)字庫就需要72X72X6763/8=4.2兆字節(jié)存儲(chǔ)空間;不但如此,在實(shí)際使用時(shí),還需要多種字體(如基本體、宋體、仿宋體、黑體、楷體等),每種字體又需要多種字號(hào)。可見,直接使用點(diǎn)陣字符方法將耗費(fèi)巨大的存儲(chǔ)空間。因此把每種字體、字號(hào)的字符都存儲(chǔ)一個(gè)對(duì)應(yīng)的點(diǎn)陣,在一般情況是不可行的。 解決這個(gè)問題一般采用壓縮技術(shù)。對(duì)字型數(shù)據(jù)壓縮后再存儲(chǔ),使用時(shí),將壓縮的數(shù)據(jù)還原為字符位圖點(diǎn)陣。壓縮方法有多種,最簡單的有黑白段壓縮法,這種方法簡單,還原快,不失真,但壓縮較差,使用

5、起來也不方便,一般用于低級(jí)的文字處理系統(tǒng)中。另一種方法是部件壓縮法。這種方法壓縮比大,缺點(diǎn)是字型質(zhì)量不能保證。三是輪廓字型法,這種方法壓縮比大,且能保證字符質(zhì)量,是當(dāng)今國際上最流行的一種方法,基本上也被認(rèn)為是符合工業(yè)標(biāo)準(zhǔn)化的方法。 輪廓字型法采用直線、或者二/三次Bezier曲線的集合來描述一個(gè)字符的輪廓線。輪廓線構(gòu)成一個(gè)或若干個(gè)封閉的平面區(qū)域。輪廓線定義加上一些指示橫寬、豎寬、基點(diǎn)、基線等的控制信息,就構(gòu)成了字符的壓縮數(shù)據(jù)。這種控制信息用于保證字符變倍時(shí)引起的字符筆劃原來的橫寬/豎寬變大變小時(shí),其寬度在任何點(diǎn)陣情況下永遠(yuǎn)一致。采用適當(dāng)?shù)膮^(qū)域填充算法,可以從字符的輪廓線定義產(chǎn)生的字符位圖點(diǎn)陣,

6、區(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ì)量,又對(duì)字型數(shù)據(jù)進(jìn)行了大量的壓縮。調(diào)用字符時(shí),可以任意地放大、縮小或進(jìn)行花樣變化,基本上能滿足電子印刷中字型質(zhì)量的要求。輪廓字型技術(shù)有著廣泛的應(yīng)用。到目前為止在印刷行業(yè)中使用最多,隨著Ms-Windows的大量使用,在CAD、圖形學(xué)等領(lǐng)域也將變得越來越重要。

7、2.5 二維圖形裁剪 在使用計(jì)算機(jī)處理圖形信息時(shí),計(jì)算機(jī)內(nèi)部存儲(chǔ)的圖形往往比較大,而屏幕顯示的只是圖的一部分。因此需要確定圖形中哪些部分落在顯示區(qū)之內(nèi),哪些落在顯示區(qū)之外,以便只顯示落在顯示區(qū)內(nèi)的那部分圖形。這個(gè)選擇過程稱為裁剪。在進(jìn)行裁剪時(shí),對(duì)應(yīng)于屏幕顯示的那部分區(qū)域稱為窗口,一般窗口定義為矩形,由上、下、左、右四條邊圍成。裁剪的實(shí)質(zhì),就是決定圖形中哪些點(diǎn)、線段、文字以及多邊形在窗口之內(nèi)。主要內(nèi)容1.點(diǎn)的裁剪2.直線的裁剪3.多邊形的裁剪4.字符的裁剪1.點(diǎn)的裁剪 設(shè)窗口由x=xL,x=xR,y=yB,y=yT圍成。對(duì)于點(diǎn)(x,y)判別兩對(duì)不等式:xL=x=xR,yB=y=yT;若四個(gè)不等式

8、均成立,則點(diǎn)在窗口之內(nèi);否則,點(diǎn)在窗口之外。最簡單的裁剪方法是把各種圖形掃描轉(zhuǎn)換為點(diǎn)之后,再判斷各點(diǎn)是否在窗內(nèi)。但那樣太費(fèi)時(shí),一般不可取。這是因?yàn)橛行﹫D形組成部分全部在窗口外,可以完全排除,不必進(jìn)行掃描轉(zhuǎn)換。所以一般采用先裁剪再掃描轉(zhuǎn)換的方法。2.直線段裁剪 直線段裁剪算法比較簡單,但非常重要,是復(fù)雜圖元裁剪的基礎(chǔ)。因?yàn)閺?fù)雜的曲線可以通過折線段來近似,從而裁剪問題也可以化為直線段的裁剪問題。常用的線段裁剪方法有三種:Cohen-Sutherland,中點(diǎn)分割算法和梁友棟barskey算法。Cohen-Sutherland裁剪算法該算法的思想是:對(duì)于每條線段P1P2分為三種情況處理。(1)若P1

9、P2完全在窗口內(nèi),則顯示該線段P1P2簡稱“取”之。(2)若P1P2明顯在窗口外,則丟棄該線段,簡稱“棄”之。(3)若線段既不滿足“取”的條件,也不滿足“棄”的條件,則在交點(diǎn)處把線段分為兩段。其中一段完全在窗口外,可棄之。然后對(duì)另一段重復(fù)上述處理。 問題:如何判斷線段與窗口的關(guān)系?為使計(jì)算機(jī)能夠快速判斷一條直線段與窗口屬何種關(guān)系,采用如下編碼方法。延長窗口的邊,將二維平面分成九個(gè)區(qū)域。每個(gè)區(qū)域賦予4位編碼Ct Cb Cr Cl.其中各位編碼的定義如下:裁剪一條線段時(shí),先求出P1P2所在的區(qū)號(hào)code1,code2。若code1=0,且code2=0,則線段P1P2在窗口內(nèi),應(yīng)取之。若按位與運(yùn)算

10、code1&code20,則說明兩個(gè)端點(diǎn)同在窗口的上方、下方、左方或右方??膳袛嗑€段完全在窗口外,可棄之。否則,按第三種情況處理。求出線段與窗口某邊的交點(diǎn),在交點(diǎn)處把線段一分為二,其中必有一段在窗口外,可棄之。在對(duì)另一段重復(fù)上述處理。在實(shí)現(xiàn)本算法時(shí),不必把線段與每條窗口邊界依次求交,只要按順序檢測到端點(diǎn)的編碼不為0,才把線段與對(duì)應(yīng)的窗口邊界求交。Cohen-Sutherland裁剪算法步驟:已知直線:(X1,Y1)(X2,Y2)與水平線YK的交點(diǎn)為:與垂直直線XR的交點(diǎn)為: 在進(jìn)行裁剪時(shí)除了要求直線與邊界線的交點(diǎn)外,還要判斷端點(diǎn)與窗口的位置關(guān)系。為此有:若編碼&00010,端點(diǎn)與左邊界有交點(diǎn);

11、若編碼&00100,端點(diǎn)與右邊界有交點(diǎn);若編碼&01000,端點(diǎn)與下邊界有交點(diǎn);若編碼&10000,端點(diǎn)與上邊界有交點(diǎn);Cohen-Sutherland直線裁剪算法小結(jié)本算法的優(yōu)點(diǎn)在于簡單,易于實(shí)現(xiàn)。他可以簡單的描述為將直線在窗口左邊的部分刪去,按左,右,下,上的順序依次進(jìn)行,處理之后,剩余部分就是可見的了。在這個(gè)算法中求交點(diǎn)是很重要的,他決定了算法的速度。另外,本算法對(duì)于其他形狀的窗口未必同樣有效。特點(diǎn):用編碼方法可快速判斷線段的完全可見和顯然不可見。中點(diǎn)分割裁剪算法基本思想:從P0點(diǎn)出發(fā)找出離P0最近的可見點(diǎn),和從P1點(diǎn)出發(fā)找出離P1最近的可見點(diǎn)。這兩個(gè)可見點(diǎn)的連線就是原線段的可見部分。與

12、Cohen-Sutherland算法一樣首先對(duì)線段端點(diǎn)進(jìn)行編碼,并把線段與窗口的關(guān)系分為三種情況,對(duì)前兩種情況,進(jìn)行一樣的處理;對(duì)于第三種情況,用中點(diǎn)分割的方法求出線段與窗口的交點(diǎn)。A、B分別為距P0 、 P1最近的可見點(diǎn),Pm為P0P1中點(diǎn)。 中點(diǎn)分割算法-求線段與窗口的交點(diǎn)從P0出發(fā)找距離P0最近可見點(diǎn)采用中點(diǎn)分割方法先求出P0P1的中點(diǎn)Pm,若P0Pm不是顯然不可見的,并且P0P1在窗口中有可見部分,則距P0最近的可見點(diǎn)一定落在P0Pm上,所以用P0Pm代替P0P1;否則取PmP1代替P0P1。再對(duì)新的P0P1求中點(diǎn)Pm。重復(fù)上述過程,直到PmP1長度小于給定的控制常數(shù)為止,此時(shí)Pm收斂

13、于交點(diǎn)。從P1出發(fā)找距離P1最近可見點(diǎn)采用上面類似方法。中點(diǎn)分割裁剪算法對(duì)分辯率為2N*2N的顯示器,上述二分過程至多進(jìn)行N次。主要過程只用到加法和除2運(yùn)算,適合硬件實(shí)現(xiàn),它可以用左右移位來代替乘除法,這樣就大大加快了速度。中點(diǎn)分割裁剪算法 設(shè)要裁剪的線段是P0P1。 線段的參數(shù)方程為: P=P0+(P1-P0)t (0 t 1) Liang-Barsky算法的基本思想是: 確定在窗口內(nèi)的線段的參數(shù)范圍,如 0.4t0.8 這樣,裁剪的結(jié)果就是直線上對(duì)應(yīng)于參數(shù)t在0.4到0.8之間的部分。梁友棟-Barsky算法問題:如何確定t的范圍? 設(shè)P0(x0,y0),P1(x1,y1),線段P0P1上

14、任一點(diǎn)P(x,y), 線段的參數(shù)表示為:x=x0+tx y=y0+ty ( 0=t=xL, x=yB y =xL, x0+tx =yB, y0+ty =yT, 梁友棟-Barsky算法令 pL= - x qL= x0-xL pR= x qR= xR-x0 pB= - y qB= y0-yB pT= y qT= yT-y0交點(diǎn)p應(yīng)該滿足 piti qi i=L,R,B,Tpi 0 ti qi/pipi =0 qi 0 時(shí), ti任意EFAB梁友棟-Barsky算法當(dāng)pi =0時(shí) 若qi 0 時(shí),線段不可見(如圖中AB,有pR=0,qR0 時(shí), ti任意, (如圖中的EF就是這種情況,它使pL=0

15、,qL0和pR=0,qR0。這時(shí)由于EF和x=xL及x=xR平行,故不必去求出EF和x=xL及x=xR的交點(diǎn),而讓EF和y=yT及y=yB的交點(diǎn)決定直線段上的可見部分。) EFAB 對(duì)于每條直線,可以計(jì)算出參數(shù)u1和u2,它們定義了在裁剪矩形內(nèi)的線段部分。u1的值由線段從外到內(nèi)遇到的矩形邊界所決定(p0)。對(duì)這些邊界計(jì)算rk=qk/pk 。u2取1和各個(gè)rk值之中的最小值。如果u1u2,則線段完全落在裁剪窗口之外,被舍棄。否則裁剪線段由參數(shù)u的兩個(gè)值u1,u2計(jì)算出來。3.多邊形裁剪ABCDEF錯(cuò)覺:多邊形裁剪是直線段裁剪的組合?新的問題:1)邊界不再封閉,需要用窗口邊界的恰當(dāng)部分來封閉它,如

16、何確定其邊界?2)一個(gè)凹多邊形可能被裁剪成幾個(gè)小的多邊形,如何確定這些小多邊形的邊界?Sutherland-Hodgman算法分割處理策略:將多邊形關(guān)于矩形窗口的裁剪分解為多邊形關(guān)于窗口四邊所在直線的裁剪。流水線過程(左上右下):前邊的結(jié)果是后邊的輸入。亦稱逐邊裁剪算法基本思想是一次用窗口的一條邊裁剪多邊形。這里明確一點(diǎn):多邊形用頂點(diǎn)序列表示,被窗口的一條邊裁剪后,仍為多邊形,仍用頂點(diǎn)序列表示,裁剪的結(jié)果就是一系列的頂點(diǎn)??紤]窗口的一條邊以及延長線構(gòu)成的裁剪線, 該線把平面分成兩個(gè)部分:可見一側(cè);不可見一側(cè);多邊形的各條邊的兩端點(diǎn)S、P。它們與裁剪線的位置關(guān)系只有四種Sutherland-Ho

17、dgman算法情況(1)僅輸出頂點(diǎn)P;情況(2)輸出0個(gè)頂點(diǎn);情況(3)輸出線段SP與裁剪線的交點(diǎn)I;情況(4)輸出線段SP與裁剪線的交點(diǎn)I和終點(diǎn)PSutherland-Hodgman算法框圖 處理線段SP過程子框圖Sutherland-Hodgman算法上述算法僅用一條裁剪邊對(duì)多邊形進(jìn)行裁剪,得到一個(gè)頂點(diǎn)序列,作為下一條裁剪邊處理過程的輸入。對(duì)于每一條裁剪邊,算法框圖同上,只是判斷點(diǎn)在窗口哪一側(cè)以及求線段SP與裁剪邊的交點(diǎn)算法應(yīng)隨之改變。Sutherland-Hodgeman算法對(duì)凸多邊形應(yīng)用本算法可以得到正確的結(jié)果,但是對(duì)凹多邊形的裁剪將如圖所示顯示出一條多余的直線。這種情況在裁剪后的多邊

18、形有兩個(gè)或者多個(gè)分離部分的時(shí)候出現(xiàn)。因?yàn)橹挥幸粋€(gè)輸出頂點(diǎn)表,所以表中最后一個(gè)頂點(diǎn)總是連著第一個(gè)頂點(diǎn)。解決這個(gè)問題有多種方法,一是把凹多邊形分割成若干個(gè)凸多邊形,然后分別處理各個(gè)凸多邊形。二是修改本算法,沿著任何一個(gè)裁剪窗口邊檢查頂點(diǎn)表,正確的連接頂點(diǎn)對(duì)。再有就是Weiler-Atherton算法。4字符裁剪 前面我們介紹了字符和文本的輸出。當(dāng)字符和文本部分在窗口內(nèi),部分在窗口外時(shí),就提出了字符裁剪問題。 字符串裁剪可按三個(gè)精度來進(jìn)行:串精度、字符精度、以及筆畫象素精度。 采用串精度進(jìn)行裁剪時(shí),將包圍字串的外接矩形對(duì)窗口作裁剪。當(dāng)字符串方框整個(gè)在窗口內(nèi)時(shí)予以顯示,否則不顯示。采用字符精度進(jìn)行裁剪

19、時(shí),將包圍字的外接矩形對(duì)窗口作裁剪,某個(gè)字符方框整個(gè)落在窗口內(nèi)予以顯示,否則不顯示。采用筆畫象素精度進(jìn)行裁剪時(shí),將筆劃分解成直線段對(duì)窗口作裁剪,處理方法同上。換種說法,字符串剪裁有三種可選擇的方法:1、字符串的有或無剪裁(all-or-none-tex)(基于字符串) 效果如下圖,其算法思想是:根據(jù)字符串所含字符的個(gè)數(shù),及字符的大小、間隔、軌跡,求出字符串的外包盒(box)。以外包盒的邊界極值與窗邊極值比較而決定該字串的去留。 (a)待裁剪字符串 (b)串精度裁剪 (c)字符精度裁剪 (d)象素精度裁剪2、字符的有或無剪裁(all-or-none-character)(基于字符) 效果如下圖,

20、其算法思想是:1)先以字串box與窗邊比較而決定字串的全刪、全留或部分留。2)對(duì)部分留的字串中,逐個(gè)測量字符的box與窗邊關(guān)系而決定該字符的去留。3、字符的精密剪裁(基于構(gòu)成字符的最小元素) 點(diǎn)陣字符:點(diǎn)裁剪;矢量字符:線裁剪 效果如下圖,其算法思想是:1)用字串box與窗邊相比較。決定字串的全刪、全留或部分刪;2)對(duì)部分留的字串中,逐個(gè)測量字符的box與窗邊的關(guān)系,決定字符的全刪、全留或部分刪;3)對(duì)部分留的字符的每一筆劃,用直線剪裁法對(duì)窗邊進(jìn)行剪裁。用離散量表示連續(xù)量引起的失真現(xiàn)象稱之為走樣(aliasing)用于減少或消除這種效果的技術(shù)稱為反走樣(antialiasing)2.6.1提高分辨率2.6.2 區(qū)域采樣2.6.3 加權(quán)區(qū)域取樣2.6 反走樣2.6.1提高分辨率把顯示器分辨率

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論