2011-11-17 68 views
0

我正在C++中構建一個dll以導入到VB項目中。 dll公開了一個函數,它將通過Win Shell提取指定文檔的預覽圖像,然後將其寫入緩衝區以供VB應用程序使用。需要設備無關的位圖位

到目前爲止,我能夠得到HBITMAP句柄沒有問題。我也能夠使用GetBitmapBits函數提取位圖數據。但是,這將不起作用,因爲需要位數據的對象需要它是獨立於設備的格式。

我讀過GetDiBits是用於此目的的函數,但我很難弄清楚如何成功調用函數。

我應該使用什麼設備上下文?另外,如何確保以獨立於設備的格式寫出數據?

在此先感謝。

+0

因此,我在這個項目上取得了一些進展。我找到了有關GetDiBits函數的輔助幫助文檔(http://support.microsoft.com/kb/74601)。 api文檔根本沒有解釋在頭結構上執行的檢查列表。所以,現在已經不存在了,我能夠成功地執行該功能並提取一些位圖數據。 – JString

+0

現在我遇到的問題顯然是設備環境或其他問題。我正在用24位顏色的100x100像素圖像測試我的代碼。使用GetDiBits提取的數據的大小正是該大小的圖像所預期的大小。但是,DIB應該具有額外的數據,例如標題以及不能在設備之間傳遞的數據。所以也許我甚至沒有使用正確的功能呢? 提醒一下,我需要將DIB數據傳遞給vb項目中的對象。 – JString

回答

0

如果您的HBITMAP引用了一個依賴於設備的位圖,並且您需要與設備無關的位,則必須將其轉換。嘗試創建一個CImage並調用BitBlt方法將獨立於設備的位置於其中。

+0

感謝您的幫助,但設備環境仍然讓我失望。 – JString