IBasicVideo::GetCurrentImage 方法 (control.h)

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

方法 GetCurrentImage 检索在呈现器处等待的当前图像。

语法

HRESULT GetCurrentImage(
  [in, out] long *pBufferSize,
  [out]     long *pDIBImage
);

参数

[in, out] pBufferSize

指向变量的指针,该变量包含调用方传入的缓冲区的大小。 如果 pDIBImageNULL,则此参数接收所需的缓冲区大小。

[out] pDIBImage

指向缓冲区的指针,其中完整图像将以与设备无关的位图 (DIB) 格式存储。 将指针强制转换为长指针类型。

返回值

返回 HRESULT 值。

注解

视频呈现器筛选器和视频混合呈现器 (VMR) 以不同的方式实现此方法。

仅视频呈现器:

如果呈现器使用 DirectDraw 加速,此方法将失败。 遗憾的是,这取决于最终用户的硬件配置,因此实际上此方法不可靠。

在调用此方法之前暂停视频呈现器。 否则,方法将返回VFW_E_NOT_PAUSED。 通过调用 IMediaControl::GetState 确保暂停操作已完成;如果暂停操作尚未完成, 则 GetCurrentImage 方法将返回E_UNEXPECTED。 根据源筛选器可用的数据,无法保证视频呈现器为此请求提供服务。 如果没有可用的映像,则返回E_FAIL。

仅视频混合呈现器:

无论 VMR 是使用 DirectDraw 加速,还是当前图形状态 (运行、停止或暂停) ,此方法都是可靠的。

视频呈现器和视频混合呈现器:

若要获取保存图像所需的缓冲区大小,请使用 pDIBImage 参数中的 NULL 指针调用此方法。 方法在 pBufferSize 参数中返回所需的缓冲区大小。 分配一个该大小的缓冲区,并再次调用 方法, pDIBImage 指向缓冲区。 第二次调用时,使用 pBufferSize 指定缓冲区大小。 如果缓冲区太小而无法保存完整映像,则 方法将返回E_OUTOFMEMORY。

如果方法成功,则缓冲区将填充整个 DIB 图像,包括 BITMAPINFOHEADER 结构,以及 Win32 BITMAPINFO 结构中定义的任何调色板条目和位掩码。 图像的格式取决于源筛选器提供的类型,不能提前指定。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 control.h (包括 Dshow.h)
Library Strmiids.lib

另请参阅

错误和成功代码

IBasicVideo 接口