[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
[此 API 不受支持,将来可能会更改或不可用。]
首先创建 Windows 应用程序的基本框架,包括 WinMain 和窗口过程。 此处未显示 WinMain 函数;在消息循环之前调用 CoInitialize 以初始化 COM 库,并在消息循环退出后 调用 CoUninitialize 。 从以下最小窗口过程开始:
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
static BITMAPINFOHEADER *pbmi = NULL;
static BYTE *pBuffer = NULL;
switch (msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
if (pbmi) delete [] pbmi;
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wparam, lparam);
}
return 0;
}
从媒体检测器检索海报帧时,它将返回一个缓冲区,其中包含 BITMAPINFOHEADER 结构,后跟图像位。 因此,请在窗口过程中定义两个静态变量: pbmi 将保存指向 BITMAPINFOHEADER 结构的指针, pBuffer 将保存指向位图的指针。 应用程序将使用 在 pbminew
中分配缓冲区,因此它必须在销毁窗口之前删除缓冲区。
pBuffer 指针计算为与 pbmi 的偏移量,因此无需删除它。
相关主题