如何从 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文件进行合并?