如何从 Windows LPBITMAP 或 HBITMAP 获取实际的字节数组?

Posted

技术标签:

【中文标题】如何从 Windows LPBITMAP 或 HBITMAP 获取实际的字节数组?【英文标题】:How do I get the actual byte array from a Windows LPBITMAP or 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

【问题讨论】:

【参考方案1】:

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

【讨论】:

Jonathon:: 感谢回复。 bmbits 是 LPVOID,如何转换为 byte[]?我假设 bmbits 实际上是一个字节数组? 如果我直接打开位图文件并提取字节,bmbits 是否与我得到的 byte[] 数组相同? 是的,它是一个字节数组,所以只需使用reinterpret_cast<BYTE*>。实际布局取决于BITMAPINFOHEADER 结构中记录的位深度。 Jonathon:: 谢谢,这正是我想要的。

以上是关于如何从 Windows LPBITMAP 或 HBITMAP 获取实际的字节数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用命令“copy/b*.tdl hb1.mp4”对这些*.tdl文件进行合并?

fatal error: hb.h: 没有那个文件或目录

如何获得文件的最新出现以及如何在UNIX中使用AWK按时间戳排序

包括 stdafx.h winsock2 重新定义错误

如何使用修饰符控制继承?

解决安装并配置好 hb后,hb -h检测不对