【问题标题】:What exactly is the difference between MediaFoundation RGB data and a BMP?MediaFoundation RGB 数据和 BMP 之间到底有什么区别?
【发布时间】:2026-02-24 10:50:01
【问题描述】:

在试图了解如何将 mediafoundation rgb32 数据转换为可以加载到图像/位图小部件或保存为位图文件的位图数据时,我想知道 RGB32 数据实际上是什么,与 BMP 数据相比有吗?

是否只是缺少标题信息或位图文件具有的宽度、高度等关键信息?

与位图文件或内存流中的 BMP 数据相比,RGB32 的实际含义是什么?

【问题讨论】:

    标签: visual-studio visual-c++ video-processing ms-media-foundation


    【解决方案1】:

    您通常将IMFMediaBuffer 的32 位RGB 附加到IMFSample。这只是位图位,没有格式特定的元数据。您可以通过获取媒体缓冲区指针来访问此数据,例如通过调用IMFSample::ConvertToContiguousBuffer,然后执行IMFMediaBuffer::Lock 来获取像素数据指针。

    获得的缓冲区与标准 .BMP 文件中的数据兼容(除了在某些情况下,行可能是相反的顺序),它只是 .BMP 文件在此数据之前有一个标题。 .BMP 文件通常具有BITMAPFILEHEADER 结构,然后是BITMAPINFOHEADER,然后是相关缓冲区。如果你一个接一个地分别初始化,这将产生一个有效的图片文件。这里的Thisother 问题展示了从位图位创建 .BMP 文件的方法。

    参见this GitHub code snippet,它与请求的任务非常接近,可能是一个很好的起点。

    【讨论】: