字符的生成算法_第1頁
字符的生成算法_第2頁
字符的生成算法_第3頁
字符的生成算法_第4頁
字符的生成算法_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、4.3文字的生成技術文字的生成技術n常用的方法有:常用的方法有:點點 陣陣 式式 pDotTextpDotText矢矢 量量 式式 pShiLiangTextpShiLiangText編編 碼碼 式式 directText directText n點陣式字符點陣式字符n nDEF:DEF:每個字符都定義成一個稱為每個字符都定義成一個稱為掩膜的矩掩膜的矩陣陣。矩陣中的元素都是一位二進制數(shù)矩陣中的元素都是一位二進制數(shù),當當該位為該位為1時時,表示字符的筆劃經(jīng)過此位,對,表示字符的筆劃經(jīng)過此位,對應于此位的象素應置為字符顏色;應于此位的象素應置為字符顏色;當該位當該位為為0時,時,表示字符的筆劃不經(jīng)

2、過此位,對應表示字符的筆劃不經(jīng)過此位,對應于此位的象素應置為背景色或不改變。于此位的象素應置為背景色或不改變。00000000000000000001111111110000000110000001100000011000000011000001100000001100000110000001100000011000011000000001111111000000000110000000000000011000000000000001100000000000000110000000000000000000000000000000000000000000當該位為當該位為1時時,表示字符的筆劃經(jīng)過

3、此位,表示字符的筆劃經(jīng)過此位當該位為當該位為0時,時,表示字符的筆劃不經(jīng)過此位表示字符的筆劃不經(jīng)過此位P-DotText掩膜的矩陣掩膜的矩陣(16(1616)16)程序如何實現(xiàn)點陣程序如何實現(xiàn)點陣法字符輸出?法字符輸出?兩個問題兩個問題(1)如何表示掩膜的矩陣?)如何表示掩膜的矩陣?(2)如何確定各個位是)如何確定各個位是1還是還是0nInt(16位位)nInttextP16=nox0000,n0 x0000,n0 x1FF0,n0 x1818,nn0 x0000n00000000000000000000000000000000000111111111000000011000000110000

4、001100000001100000110000000110000011000000110000001100001100000000111111100000000011000000000000001100000000000000110000000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000111111111000000011000000110000001100000001100000110000000110000011000000110000001100001100

5、000000111111100000000011000000000000001100000000000000110000000000000011000000000000000000000000000000000000000000000000000000000001000000000000000001000000000000000001000000000000000001000000000000000001000000000000000001000000000000000001000000000000000001000000000000000001000000000000000001000000

6、00000000000100000000000000000100000000000000000100000000000000000010000000000000000001000000000000000000100000000000000000010000000000000000001Text16mask16如何判如何判斷字模斷字模中各個中各個位的子位的子呢?呢?nvoid displayText(intx0,inty0,intText,intcolor) int i,j; n for(i=0;i16;i+)/行行nfor(j=0;j16;j+)/列列nnnnif(Texti&mask

7、j)!=0)nputpixel(x0+j,y0+i,color);ninttext16=0 x0000,0 x0000,0 x0000,0 x0000,0 x0000,0 x0000,0 xFFFF,0 xFFFF,0 xFFFF,0 xFFFF,0 x0000,0 x0000,0 x0000,0 x0000,0 x0000,0 x0000;nintmask16=0 x8000, 0 x4000, 0 x2000, 0 x1000, 0 x0800, 0 x0400, 0 x0200, 0 x0100, 0 x0080, 0 x0040, 0 x0020, 0 x0010, 0 x0008,

8、0 x0004, 0 x0002, 0 x0001 n點陣式字符時主要的文字表示形式。點陣式字符時主要的文字表示形式。n常用的點陣大小有常用的點陣大小有n57、79、88、1616等等等等n當點陣變大時,字型可以做得非常漂亮。當點陣變大時,字型可以做得非常漂亮。n優(yōu)點:優(yōu)點:字形美觀是字符表示的主要形式字形美觀是字符表示的主要形式n缺點:缺點:旋轉比較困難、占用的存儲空間較大旋轉比較困難、占用的存儲空間較大n矢量式字符矢量式字符nDEFDEF:將字符看作是一個將字符看作是一個圖形,圖形,用用點坐標的序列點坐標的序列來表示一個字符,來表示一個字符,相鄰兩點表示一條矢量,相鄰兩點表示一條矢量,字符

9、的形字符的形狀便由矢量序列刻劃。狀便由矢量序列刻劃。 例:例:“B”B”是由頂點序列是由頂點序列 a, b, c, d, e, f, e, g, h, I, j, k ,a, la, b, c, d, e, f, e, g, h, I, j, k ,a, l,aa 的坐標表達的坐標表達 調用矢量式字符的過程相當于輸出一個調用矢量式字符的過程相當于輸出一個polylin 如何顯示矢量字符呢?P-ShiLiangText例:例:(50,375)(200,375)(225,350)(225,225)(200,200)(50,200)(225,125)(225,50)(200,25)(50,25)(2

10、5,25)(25,375)nint text= 50,375,200,375,225,350,225,n225,200,200,50,200,200,200,225,175,225,50,200,25,25,25,50,25,50,375,25,375,50,375;nvoiddisplayText(intx,inty,int*text,intlen)n int i;n int *newText=malloc(sizeof(int)*len);n for(i=0;ilen/2;i+)nnndrawpoly(len/2,newText);nnewText2*i=x+text2*i;nnewTex

11、t2*i+1=y+text2*i+1;除了使用除了使用drawpolydrawpoly函數(shù)函數(shù)顯示矢量字符可以采用顯示矢量字符可以采用別的方法嗎?別的方法嗎? void displayText2(int x,int y,int *text,int len) int i; moveto(x+text0,y+text1); for(i=1;ilen/2;i+)lineto(x+text2*i,y+text2*i+1);n矢量式字符的優(yōu)點:矢量式字符的優(yōu)點:n矢量式字符具有和圖形相一致的數(shù)據(jù)結矢量式字符具有和圖形相一致的數(shù)據(jù)結構,因而可以接受任何對于圖形的操作,構,因而可以接受任何對于圖形的操作,如

12、放大、旋轉,平移如放大、旋轉,平移等等50 375 1 200 375 1225 350 1225 225 1200 200 150 200 1200 200 1 225 175 1225 50 1200 25 125 25 150 25 150 375 125 375 1 50 375 1a b pc d qL m s*=x y 1 a a b b c c d d e e f f e e g g h h I I j j k k a a l l a a字符字符B的旋轉、平移、縮的旋轉、平移、縮放,和斜體放,和斜體(x方向錯切方向錯切15)如何顯示粗體矢量字符呢?voiddisplayText2

13、(intx,inty,int*text,intlen)inti;setlinestyle(SOLID_LINE,0,3);moveto(x+text0,y+text1);for(i=1;ilen/2;i+)lineto(x+text2*i,y+text2*i+1);n方向編碼方向編碼 DEF:DEF:方向編碼式字符用有限的若干種方方向編碼式字符用有限的若干種方向編碼來表達一個字符向編碼來表達一個字符. . 8 8個方向的編碼為個方向的編碼為0 7 0 7 一個字符就可以表示一個字符就可以表示為一連串方向碼為一連串方向碼 其中編碼為其中編碼為偶數(shù)方向的增量為固定長度偶數(shù)方向的增量為固定長度1,奇

14、數(shù)方向的增量為固定長度奇數(shù)方向的增量為固定長度 2方向編碼是:方向編碼是: 000 11 2222 33 444 55 6666 77 0 0 0 1122223 3 4 4 4 5566667 7“B”就表示為就表示為8方向編碼:方向編碼:0000 123 444 000 123 4444 0 66666640 0 0 0 01234 4 40 0 0123 4 4 4 40666664程序如何實現(xiàn)方向程序如何實現(xiàn)方向碼字符輸出?碼字符輸出?P-DirectText.cModel82= 1,0,1,-1, 0,-1,-1,-1, -1,0, -1,1,0,1,1,1;xynint direc

15、t27=0,0,0,0,1, 2,3,4,4,4, 0,0,0,1,2, n 3,4,4,4,4, 0,6,6,6,6, 6,4 ;nvoiddisplayText(intx0,inty0,intdirect,nintlen,intsize) ninti;n float Model82= 1,0,1,-1, 0,-1,-1,-1, -1,0,n -1,1,0,1,1,1;n moveto(x0,y0);n for(i=1;ilen;i+)n nlinerel(Modeldirecti0*size,Modeldirecti1*size);如何顯示粗體方向字符呢?如何顯示斜體方向字符呢?nvoid

16、 displayText(intx0,inty0,intText,intlen,intsize)n int i;n float direct82=n 1,0,nsqrt2*cos30,-sqrt2*sin30,n+sin15,-cos15,n-sqrt2*sin30,-sqrt2*cos30,n-1,0,n-sqrt2*cos30,sqrt2*sin30,n-sin15,cos15,n-sqrt2*sin30,sqrt2*cos30;n moveto(x0,y0);n for (i=1;ilen;i+) linerel(directTexti0*size,directTexti1*size);

17、 n 0 0 0 1122223 3 4 4 4 5566667 7nvoiddisplayText(intx0,inty0,intdirect,intlen,intsize,intalfa) n int i;nfloatModel82=1,0,sqrt2*cos(45-alfa),-sin(45-alfa),+sin(alfa),-cos(alfa),-sin(45-alfa),-cos(45-alfa),-1,0,-cos(45-alfa),sin(45-lfa),sin(alfa),cos(alfa),sin(45-alfa),cos(45-alfa);n moveto(x0,y0);n for (i=1;ilen;i+) n nnnlinerel(Modeldirecti0*size,nModeldirecti1*size); n程序設計題(任選一)程序設計題(任選一)n(1)建立一個十個字以上的字庫,并能夠顯)建立一個十個字以上的字庫,并能夠顯示該字庫中的字符(選用任何字符輸出方法)示該字庫中的字符(選用任何字符輸出方法)n(2)實現(xiàn))實現(xiàn)DDA直線算法和直線算法和DDA角度畫圓算角度畫圓算法法n(3)voiddraw_DDA_line(intx0,inty0,intx1,inty1)floatk;floatx,y;inttemp;floatdeltax,de

溫馨提示

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

評論

0/150

提交評論