我正在使用一些扫描仪api,它将一个HANDLE返回到BMP格式的图像(所以在文档中这样说)。我试图以某种方式从这个句柄获取BITMAP,但是例如这段代码不起作用:
HANDLE handle = getHandleFromScanner();
BITMAP bitmap;
int u = GetObject(handle, sizeof(BITMAP), &bitmap);
u在这里为0,getLastError()返回6表示句柄无效。但除了通过getHandleFromScanner()
函数之外,我无法获得任何其他句柄。
可能应该用这个句柄进行一些转换吗?有任何想法吗?使用位图句柄的正确方法是什么?或者任何简单的api存在?我通过谷歌找到的样本没有帮助我。
非常感谢。
答案 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扫描仪。