0
我試圖從剪貼板獲取位圖數據。我能順利拿到了CF_DIBV5
對象的標頭信息:從剪貼板獲取CF_DIBV5的位圖
BOOLEAN exists = IsClipboardFormatAvailable(CF_DIBV5) &&
OpenClipboard(session->windowHandle);
if (exists) {
HGLOBAL clipboard = GetClipboardData(CF_DIBV5);
exists = clipboard != NULL;
if (exists) {
LPTSTR lptstr = GlobalLock(clipboard);
exists = lptstr != NULL;
if (exists) {
BITMAPV5HEADER * header = clipboard;
//now need the HBITMAP!
}
}
}
//...
我可以成功登錄從報頭信息。現在我想要實際的HBITMAP
,所以我可以將它傳遞到GetDIBits
。文檔說CF_DIBV5
是一個BITMAPV5HEADER
「後跟位圖顏色空間信息和位圖位」。
最後一部分讓我很尷尬,因爲它很簡單。我假設去位圖位,我需要添加頭的大小和「色彩空間信息」到頭指針。所以
HBITMAP bitmap = header + sizeof(BITMAPV5HEADER) + /* ???? */;
我想......
我怎麼能知道這神祕的色彩空間信息的大小? 「位圖位」字面上是一個HBITMAP,因此上述表達式是正確的?
由於我是C新手,我可能會忽略這個明顯的問題。
更新:我現在通過試驗和重讀一些文檔認識到HBITMAP
是一個DDB,而我有一個DIB。所以GetDIBits
對我來說不是正確的功能。可以使用什麼函數將任何DIB轉換爲不壓縮的格式?