【问题标题】:converting HBITMAP to byte array将 HBITMAP 转换为字节数组
【发布时间】:2010-11-09 15:01:47
【问题描述】:

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

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

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

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

非常感谢。

【问题讨论】:

  • 如果它真的返回了一个位图,那么它应该返回一个 HBITMAP,而不是 HANDLE。继续浏览 API,看看你可以用这个句柄做什么。

标签: c++ winapi gdi


【解决方案1】:

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

【讨论】:

  • 谢谢。 GetObjectType() 为句柄返回 0,这意味着它无法识别句柄类型。扫描仪似乎返回了一些格式错误的图像。
【解决方案2】:

谢谢各位。

句柄似乎是图像本身,所以下面的代码解决了这个问题:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 2014-08-08
    • 2013-02-23
    • 2011-09-21
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多