将HBITMAP转换为字节数组

时间:2010-11-09 15:01:48

标签: c++ winapi gdi

我正在使用一些扫描仪api,它将一个HANDLE返回到BMP格式的图像(所以在文档中这样说)。我试图以某种方式从这个句柄获取BITMAP,但是例如这段代码不起作用:

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

u在这里为0,getLastError()返回6表示句柄无效。但除了通过getHandleFromScanner()函数之外,我无法获得任何其他句柄。

可能应该用这个句柄进行一些转换吗?有任何想法吗?使用位图句柄的正确方法是什么?或者任何简单的api存在?我通过谷歌找到的样本没有帮助我。

非常感谢。

2 个答案:

答案 0 :(得分:2)

你试过GetDIBits()吗?这应该可以工作,但您也需要设备上下文。您可能总是想要在句柄上调用GetObjectType()以查看它是否真的返回HBITMAP。

答案 1 :(得分:1)

谢谢你们。

句柄似乎是图像本身,因此以下代码解决了问题:

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

如果有人需要它,扫描仪是Olivetti PR2 plus扫描仪。