2010-11-09 121 views
3

我正在使用一些掃描儀api,它將BMP格式的圖像返回給一個圖像(所以它在文檔中是這麼說的)。這裏轉換HBITMAP爲字節數組

HANDLE handle = getHandleFromScanner(); 
BITMAP bitmap; 
int u = GetObject(handle, sizeof(BITMAP), &bitmap); 

u是0和GetLastError()返回6,這意味着該句柄是無效的:我想從這個手柄某種方式得到位圖,但例如該代碼不起作用。但除了通過getHandleFromScanner()函數,我無法獲得任何其他句柄。

可能有些轉換應該用這個句柄來完成嗎?有任何想法嗎?使用位圖句柄的正確方法是什麼?或者有任何簡單的API存在?我通過谷歌找到的樣本並沒有幫助我。

非常感謝。

+0

如果它確實返回了一個位圖,那麼它應該返回一個HBITMAP,而不是一個HANDLE。繼續瀏覽API,看看你可以用這個句柄做什麼。 – 2010-11-09 16:36:54

回答

1

謝謝你們。

手柄似乎是圖像本身,所以下面的代碼解決了這個問題:

char* pImage = NULL; 
HANDLE hImage= getHandleFromScanner(); 
pImage = (char *)GlobalLock(hImage); 
// pImage now contains the bytes of the image 

如果有人永遠都需要它,將掃描儀的Olivetti PR2加上掃描儀。

2

你試過GetDIBits()?這應該可以工作,但你也需要設備上下文。你可能總是想要在句柄上調用GetObjectType()來查看它是否真的返回一個HBITMAP。

+0

謝謝。 GetObjectType()爲句柄返回0,這意味着它無法識別句柄類型。看來,掃描儀返回一些不良格式的圖像。 – 2010-11-09 16:02:43