【问题标题】:How do I get the actual byte array from a Windows LPBITMAP or HBITMAP?如何从 Windows LPBITMAP 或 HBITMAP 获取实际的字节数组?
【发布时间】:2015-01-15 00:39:18
【问题描述】:

我正在构建一个需要对 BITMAPS 进行一些分析的非托管 Windows C++ 项目。 该应用程序不是 Windows 应用程序,而是一个 win32 库。

客户端应用程序会将 LPBITMAP 的 HBITMAP 传递到库中。

我需要访问底层字节数组[]进行处理和分析。 如何从 BITMAP 中获取字节数组 []? (无需转到临时文件)。

我已经能够从 BITMP (.BMP) 文件中执行此操作。 但在这些情况下,我需要使用 HBITMAP 和 LPBITMAP。

我该如何实现? (请记住,我 无权访问 windows HDC 等,因为这不是 windows 应用程序,该库也不会与 windows 应用程序一起运行)

这可以通过opencv库以某种方式完成吗?

谢谢, 约翰B

【问题讨论】:

    标签: c++ winapi opencv bitmap


    【解决方案1】:

    如果您有LPBITMAP,那么这些位已经存在,在BITMAP::bmBits 中。 如果您有HBITMAP,您可以使用GetDIBits 来获取它们。

    【讨论】:

    • Jonathon:: 感谢回复。 bmbits 是 LPVOID,如何转换为 byte[]?我假设 bmbits 实际上是一个字节数组?
    • 如果我直接打开位图文件并提取字节,bmbits 是否与我得到的 byte[] 数组相同?
    • 是的,它是一个字节数组,所以只需使用reinterpret_cast<BYTE*>。实际布局取决于BITMAPINFOHEADER 结构中记录的位深度。
    • Jonathon:: 谢谢,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 2013-07-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多