對于DIB的輸出方式
發表時間:2024-06-18 來源:明輝站整理相關軟件相關文章人氣:4
[摘要]DIB,設備無關位圖。既然設備無關了,我們要輸出它就有了一些困難,畢竟在屏幕上能看到的都是設備場景中的圖像。那么要怎樣輸出它呢?1、半隨機顯示——SetDIBitsToDevice是的,該API實現的輸出是半隨機化的。簡單的說,用這個函數輸出的圖片我們能夠看到,但是它是不會被保存的,即使在VB中開...
DIB,設備無關位圖。既然設備無關了,我們要輸出它就有了一些困難,畢竟在屏幕上能看到的都是設備場景中的圖像。那么要怎樣輸出它呢?
1、半隨機顯示——SetDIBitsToDevice
是的,該API實現的輸出是半隨機化的。簡單的說,用這個函數輸出的圖片我們能夠看到,但是它是不會被保存的,即使在VB中開啟了AutoRedraw也一樣。根據我的猜想,這個函數的實際功能非常簡單,將一幅圖片畫到一個設備場景所在的區域,設置不經過這個hDC本身的管理。
那么根據現象以及由現象推出的本質,這個函數對我們來說只有一個優點:性能較高。但實際使用中的現象并非如此,該函數輸出一幅640x480的位圖平均需要6ms左右,如果你使用過Bitblt函數,你會發現,這個操作的效率是如此之低,甚至不如設備場景間的圖片傳遞。這是為什么?原因很簡單,DIB的轉換。的確,SetDIBitsToDevice是直接將圖像畫到hDC中,但是這個過程卻一定要把DIB的數據轉換成hDC兼容的格式(就是hDC的圖片格式本身),然后再繪出。所以要提高SetDIBitsToDevice的執行性能,首先你創建的位圖最好符合你預期要輸出到的hDC的格式。
P.S.我很奇怪這個函數為什么要這樣設計,因為它是不能保存改變的,即使用在打印hDC中也不能使得輸出內容被打印出來。這個,希望有高手來解答了。
2、穩定化輸出:CreateDIBitmap
這個函數簡單得多。你給出一個DIB,他負責把內容copy下來,然后“封裝”為一個hBitmap對象。你可以使用任何你想得到的方法對這個對象進行處理,根據我的實驗,多數都是成功的。
不過千萬不要妄想使用這個hBitmap對象進行原DIB的輸入操作。除非你用它創建了一個兼容的hDC,并且沒有把這個hBitmap選入任何hDC對象。
3、隨機輸出:DirectX
這個很高深。為什么這么說?因為你要手動進行好多轉換,然后以占用至少30MB內存為代價,來實現動態圖像的極連貫的輸出。在這里我不做詳細介紹了,本人水平有限,正在研究這個東東。同樣的,希望來個誰幫幫偶~
Over.
不知道這篇小心得對大家有沒有用,有用的話說一聲,謝了~呵呵~