MediaFoundation RGB 数据和 BMP 之间到底有什么区别?

What exactly is the difference between MediaFoundation RGB data and a BMP?

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

它是否只是缺少 header 位图文件具有的信息或关键信息,如宽度、高度等?

与位图文件或内存流中的 BMP 数据相比,RGB32 实际上意味着什么?

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

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

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