IBasicVideo::GetCurrentImage 方法 (control.h)
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
方法 GetCurrentImage
检索在呈现器处等待的当前图像。
语法
HRESULT GetCurrentImage(
[in, out] long *pBufferSize,
[out] long *pDIBImage
);
参数
[in, out] pBufferSize
指向变量的指针,该变量包含调用方传入的缓冲区的大小。 如果 pDIBImage 为 NULL,则此参数接收所需的缓冲区大小。
[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 |