資源描述:
《VC數字圖像處理編程講座之四》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、VC數字圖像處理編程講座之四[導讀]在這一講中作者進一步深入講解了圖像特效的顯示技術......BMP圖像顯示的特效操作 上期講座中我們主要講述了BMP圖像數據的存取、圖像的顯示和調色板的操作等內容,在上面的學習基礎上,我們可以進一步深化,學習并掌握圖像特效顯示技術。有了這種技術,可以用來在今后的項目開發(fā)中美化我們的軟件界面,提高軟件的視覺效果。在如今的商業(yè)軟件中,幾乎每一幅圖像的顯示都采用了圖像特效顯示,例如讀者比較熟悉的Windows的屏幕保護程序就采用了各種各樣的圖像特效顯示,使人感到眼花繚亂和耳目一新。專業(yè)圖像處理軟件更是提供了豐富的顯示方
2、式供用戶使用,可以方便的在程序中實現(xiàn)圖像的特效顯示,如PhotoShop、Authorware等。本節(jié)主要介紹如何實現(xiàn)圖像的浮雕、雕刻、百頁窗、旋轉、掃描、柵條、馬賽克、和漸顯漸隱顯示等效果。通過這期講座的學習,讀者朋友們也可以自己動手制作擁有特效顯示效果的軟件了。圖像的顯示我們講過主要有BitBlt()、SetDIBitsToDevice()和StretchDIBits()等函數。需要讀者注意的是,在特效顯示時,并不是每個顯示函數都適宜,BitBlt()函數主要是用來顯示設備無關位圖(DDB),后兩個函數用來顯示設備無關位圖(DIB)。由于我們講座
3、里處理的是設備無關位圖,所以我們主要關心的是后兩個函數的應用,其中SetDIBitsToDevice()使用起來較死板,遠不如StretchDIBits()用的靈活,并且對大多數的特效顯示無能為力,所以為了實現(xiàn)圖像的特效顯示效果,需要使用StretchDIBits()函數來顯示圖像,具體什么原因,我想可能是微軟在實現(xiàn)這些函數時使用的方法不同吧。這些函數如何使用,各個參數的含義,可以參考微軟的MSDN?! 崿F(xiàn)圖像的特殊效果的顯示的基本思路是要么是操作圖像的像素,要么是對圖像分塊按一定的方向或次序,分階段的顯示或擦除對應的圖像塊。對于第二種顯示的思路,
4、其中的要點是:1.劃分圖像塊;2.確定圖像塊的操作次序;3.顯示或清除對應的圖像塊;4.在兩個連續(xù)顯示的圖像塊之間插入一個固定的延遲。其中圖像塊的劃分決定了圖像的顯示方式,圖像塊的顯示順序決定了顯示的方向和細分的依據。不同的效果決定了不同的分塊方法和顯示次序,我們將在后面的各種特效顯示中介紹如何分塊和決定次序。為了使圖像的顯示過程明顯的表現(xiàn)出來,實現(xiàn)顯示的特效,就需要在圖像塊的依此顯示中插入固定的延遲。也許讀者朋友會想到利用sleep()函數或用Settime()來實現(xiàn)延遲,由于Windows是個基于消息的多任務操作系統(tǒng),這些方法所產生的延遲時間對于
5、圖像的顯示來說是不精確的,為了實現(xiàn)與機器無關的更精確的時間延遲,可以采用timeGetTime()函數來產生微秒級的延遲。使用這個函數時為了編譯不產生錯誤,要在連接設置中引入“Winmm.lib”庫,并要包含頭文件“Mmsystem.h”。這里我們首先給出一個延遲函數,它用來實現(xiàn)固定時間的延遲:voidDelayTime(DWORDtime){DWORDBeginTime,EndTime;BeginTime=timeGetTime();//得到當前的系統(tǒng)時間、單位為微秒;do{EndTime=TimeGetTime();//再次得到當前的系統(tǒng)時間;}
6、while((EndTime-BeginTime)