Windows下的動(dòng)畫(huà)特技—淡入淡出_第1頁(yè)
Windows下的動(dòng)畫(huà)特技—淡入淡出_第2頁(yè)
Windows下的動(dòng)畫(huà)特技—淡入淡出_第3頁(yè)
Windows下的動(dòng)畫(huà)特技—淡入淡出_第4頁(yè)
Windows下的動(dòng)畫(huà)特技—淡入淡出_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、Windows下的動(dòng)畫(huà)特技 淡入淡出 動(dòng)畫(huà)程序設(shè)計(jì)是多煤體程序設(shè)計(jì)的另一個(gè)方面,在程序設(shè)計(jì)中適當(dāng)?shù)囊雱?dòng)畫(huà)特技,能夠使程序更加生動(dòng)活潑。與其它多煤體程序設(shè)計(jì)不同的是,動(dòng)畫(huà)并不需要特殊的多煤體硬件設(shè)備加以支持。本文將以動(dòng)畫(huà)特技中的“淡入淡出”技術(shù)為例來(lái)說(shuō)明如何協(xié)同Windows和Visual C+來(lái)共同完成動(dòng)畫(huà)程序設(shè)計(jì)。一 淡入淡出(Dissolve)淡入淡出技術(shù)源于電影業(yè),電影制作人利用淡入淡出技術(shù)來(lái)完成一副圖象A到另一副圖象B的轉(zhuǎn)換。電影中的淡入淡出技術(shù)可以通過(guò)制作許多中間過(guò)渡圖象來(lái)實(shí)現(xiàn)。圖1 圖象淡入淡出過(guò)程然而,在計(jì)算機(jī)上完成淡入淡出則是另一回事,使用過(guò)渡圖象的方法既不實(shí)際也不必要。一種

2、可行的辦法是在已顯示的位圖A上,不斷開(kāi)些小洞,在小洞內(nèi)顯示位圖B的象素,隨著小洞逐漸增多,位圖A越來(lái)越模糊,位圖B越來(lái)越清晰,最后,位圖A消失,位圖B完整的顯示出來(lái),這個(gè)過(guò)程可參見(jiàn)圖1。二 Windows調(diào)色板完成淡入淡出,首先必須能夠正確的顯示圖象,這要求能夠正確的處理顏色。彩色顯示器能夠顯示很多種顏色,但在一般情況下,在給定的時(shí)刻只能顯示一定數(shù)目的顏色。在VGA和SVGA這類(lèi)顯示控制器上都使用調(diào)色板來(lái)限制應(yīng)用程序所能使用的顏色的數(shù)目。調(diào)色板規(guī)定了一個(gè)顏色集合(一般為256項(xiàng)),屏幕象素值對(duì)應(yīng)調(diào)色板的一個(gè)表項(xiàng)的索引。在Windows系統(tǒng)下,系統(tǒng)中同時(shí)會(huì)有多個(gè)應(yīng)用程序在運(yùn)行,桌面上將顯示多個(gè)窗

3、口,而每個(gè)窗口對(duì)顏色的需求可能是不一樣的。然而,整個(gè)顯示是共用一個(gè)物理調(diào)色板,若某個(gè)窗口出于本身的需要改變了物理調(diào)色板,則可能造成其它窗口顯示不正確的顏色。為解決上述矛盾,Windows引入了邏輯調(diào)色板和系統(tǒng)調(diào)色板的概念。系統(tǒng)調(diào)色板(或稱(chēng)硬件調(diào)色板)即物理調(diào)色板,它是整個(gè)桌面的調(diào)色板,應(yīng)用程序通過(guò)創(chuàng)建一個(gè)或多個(gè)邏輯調(diào)色板的方法來(lái)使用系統(tǒng)調(diào)色板。當(dāng)一個(gè)窗口請(qǐng)求使用其邏輯調(diào)色板時(shí),系統(tǒng)完成邏輯調(diào)色板到系統(tǒng)調(diào)色板的映射,映射的過(guò)程如下? 系統(tǒng)調(diào)色板保留前10種和后10種顏色作為靜態(tài)色,用于Windows系統(tǒng)顏色。? 邏輯調(diào)色板中的項(xiàng)與系統(tǒng)調(diào)色板中的項(xiàng)做完全匹配(RGB值相同的項(xiàng))。? 對(duì)邏輯調(diào)色板中

4、不完全匹配的項(xiàng),Windows將其設(shè)置到系統(tǒng)調(diào)色板中的未用項(xiàng)。? 如果系統(tǒng)調(diào)色板的所有項(xiàng)都被使用,Windows將邏輯調(diào)色板其余的項(xiàng)匹配到系統(tǒng)調(diào)色板中盡可能相近的表項(xiàng)上(稱(chēng)為不完全匹配)。Windows總是先滿(mǎn)足活動(dòng)窗口對(duì)顏色的需求,對(duì)于剩下的窗口,Windows沿Z次序(窗口鋪放在桌面的次序)滿(mǎn)足最近接收到輸入焦點(diǎn)的窗口。VC+的MFC提供了類(lèi)Cpalette和CDC進(jìn)行對(duì)調(diào)色板的有關(guān)操作。下面是一些常用的函數(shù)? Cpalette:CreatePalette()創(chuàng)建調(diào)色板? CDC:SelectPalette()將調(diào)色板選進(jìn)設(shè)備? CDC:RealizePalette()調(diào)色板實(shí)現(xiàn)三 Bit

5、Blt()與三元光珊操作在MFC中CDC:BitBlt()在兩個(gè)設(shè)備對(duì)象的位圖之間進(jìn)行邏輯操作。其原型為BOOL BitBlt(int x , int y , int nWidth , intnHeight , CDC* pSrcDC , int xSrc , int ySrc ,DWORD dwRop) ;其中,xSrc,ySrc是源設(shè)備上要移動(dòng)的位圖的起始點(diǎn),x,y,nWidth,hHeight參數(shù)表示目的設(shè)備矩形起始點(diǎn)坐標(biāo),寬和高,nWidth和nHeight也用于源設(shè)備。dwRop是三元光珊操作代碼。BitBlt在進(jìn)行位圖復(fù)制時(shí)要對(duì)三個(gè)對(duì)象進(jìn)行邏輯組合(因此稱(chēng)為三元光珊操作)目的設(shè)備中

6、選定的畫(huà)刷,源設(shè)備中所要復(fù)制的矩形中的位圖和目的設(shè)備中矩形的位圖。畫(huà)刷是一個(gè)8*8的位圖,可以使用CDC:CreatePatternBrush()創(chuàng)建。淡入淡出實(shí)際上就是通過(guò)BitBlt()函數(shù)進(jìn)行將位圖A放入目的設(shè)備,將位圖B放入源設(shè)備,利用畫(huà)刷在位圖A上打洞并以位圖B的象素填入,不斷改變畫(huà)刷使洞越來(lái)越多進(jìn)行BitBlt()操作,最后完成整個(gè)過(guò)程。完成上述過(guò)程需要選擇一個(gè)合適的ROP操作碼,下面說(shuō)明如何計(jì)算這個(gè)操作碼上述過(guò)程實(shí)際上可以分成兩步進(jìn)行1. 利用畫(huà)刷在目的位圖上打洞2. 將位圖B的象素填入洞中。完成第一步可以采用AND操作,即Pattern & Destination。通過(guò)

7、這個(gè)操作,畫(huà)刷中的黑點(diǎn)對(duì)應(yīng)的象素值為0 (0&Destination=0),濾去了Destination的象素;而畫(huà)刷中的白點(diǎn)對(duì)應(yīng)象素處仍保持Destination的象素值(1&Destination=Destination)。同樣道理,第二步可以采用操作(Pattern) & Source將畫(huà)刷黑點(diǎn)對(duì)應(yīng)象素置為Source的象素值,畫(huà)刷白點(diǎn)對(duì)應(yīng)象素值為0。最后,兩各操作進(jìn)行OR即可完成指定操作。因此,最后的ROP操作為(Pattern & Destination) | (Pattern) &Source)取Pattern =11110000,Desti

8、nation =10101010,Source=11001100可以計(jì)算出ROP碼為10101100=0xAC,查ROP操作碼表可得最后的ROP碼為0x00AC0744。四 淡入淡出例程下面的例程說(shuō)明了淡入淡出特技的實(shí)現(xiàn)過(guò)程。創(chuàng)建該例程的步驟如下1. 利用AppWizard創(chuàng)建一個(gè)基于對(duì)話框的工程。2. 添加產(chǎn)生畫(huà)刷的過(guò)程Cbrush* Cdissolve:CreateDissolveBrush(int Step)/ 創(chuàng)建畫(huà)刷所需數(shù)據(jù)static int data65 = 1, 5,33,37,19,23,51,55,17,21,49,53, 3, 7,35,39,10,14,42,46,28

9、,32,60,64,26,30,58,62,12,16,44,48,8, 4,40,36,22,18,54,50,24,20,56,52, 6, 2,38,34,15,11,47,43,29,25,61,57,31,27,63,59,13, 9,45,41;if (Step<0|Step>m_maxstep-1) return NULL;Cbrush* pBrush = new Cbrush;/ 最后一步使用黑畫(huà)刷if (Step=m_maxstep-1)pBrush->CreateSolidBrush(RGB(0,0,0);return pBrush;/ 計(jì)算畫(huà)刷數(shù)據(jù)BYTE pixels16;for (int I=0;I<8;I+) pixelsI*2 = 0xFF;for (I=1;I<=(Step*(64/m_maxstep);I+)int row = (dataI-1)/8;int col = (dataI-1)%8;pixelsrow*2=pixelsrow*2 &(BYTE)pow(2,col);/ 創(chuàng)建畫(huà)刷Cbitmap bitmap;if (!bitmap.CreateBitmap(8,8,1,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論