明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

對于DIB的輸出方式

[摘要]DIB,設(shè)備無關(guān)位圖。既然設(shè)備無關(guān)了,我們要輸出它就有了一些困難,畢竟在屏幕上能看到的都是設(shè)備場景中的圖像。那么要怎樣輸出它呢?1、半隨機(jī)顯示——SetDIBitsToDevice是的,該API實(shí)現(xiàn)的輸出是半隨機(jī)化的。簡單的說,用這個函數(shù)輸出的圖片我們能夠看到,但是它是不會被保存的,即使在VB中開...
DIB,設(shè)備無關(guān)位圖。既然設(shè)備無關(guān)了,我們要輸出它就有了一些困難,畢竟在屏幕上能看到的都是設(shè)備場景中的圖像。那么要怎樣輸出它呢?

1、半隨機(jī)顯示——SetDIBitsToDevice

是的,該API實(shí)現(xiàn)的輸出是半隨機(jī)化的。簡單的說,用這個函數(shù)輸出的圖片我們能夠看到,但是它是不會被保存的,即使在VB中開啟了AutoRedraw也一樣。根據(jù)我的猜想,這個函數(shù)的實(shí)際功能非常簡單,將一幅圖片畫到一個設(shè)備場景所在的區(qū)域,設(shè)置不經(jīng)過這個hDC本身的管理。

那么根據(jù)現(xiàn)象以及由現(xiàn)象推出的本質(zhì),這個函數(shù)對我們來說只有一個優(yōu)點(diǎn):性能較高。但實(shí)際使用中的現(xiàn)象并非如此,該函數(shù)輸出一幅640x480的位圖平均需要6ms左右,如果你使用過Bitblt函數(shù),你會發(fā)現(xiàn),這個操作的效率是如此之低,甚至不如設(shè)備場景間的圖片傳遞。這是為什么?原因很簡單,DIB的轉(zhuǎn)換。的確,SetDIBitsToDevice是直接將圖像畫到hDC中,但是這個過程卻一定要把DIB的數(shù)據(jù)轉(zhuǎn)換成hDC兼容的格式(就是hDC的圖片格式本身),然后再繪出。所以要提高SetDIBitsToDevice的執(zhí)行性能,首先你創(chuàng)建的位圖最好符合你預(yù)期要輸出到的hDC的格式。

P.S.我很奇怪這個函數(shù)為什么要這樣設(shè)計,因?yàn)樗遣荒鼙4娓淖兊,即使用在打印hDC中也不能使得輸出內(nèi)容被打印出來。這個,希望有高手來解答了。

2、穩(wěn)定化輸出:CreateDIBitmap

這個函數(shù)簡單得多。你給出一個DIB,他負(fù)責(zé)把內(nèi)容copy下來,然后“封裝”為一個hBitmap對象。你可以使用任何你想得到的方法對這個對象進(jìn)行處理,根據(jù)我的實(shí)驗(yàn),多數(shù)都是成功的。

不過千萬不要妄想使用這個hBitmap對象進(jìn)行原DIB的輸入操作。除非你用它創(chuàng)建了一個兼容的hDC,并且沒有把這個hBitmap選入任何hDC對象。

3、隨機(jī)輸出:DirectX

這個很高深。為什么這么說?因?yàn)槟阋謩舆M(jìn)行好多轉(zhuǎn)換,然后以占用至少30MB內(nèi)存為代價,來實(shí)現(xiàn)動態(tài)圖像的極連貫的輸出。在這里我不做詳細(xì)介紹了,本人水平有限,正在研究這個東東。同樣的,希望來個誰幫幫偶~



Over.

不知道這篇小心得對大家有沒有用,有用的話說一聲,謝了~呵呵~



標(biāo)簽:對于DIB的輸出方式