IBasicVideo::GetCurrentImage 方法 (control.h)
[與此頁面相關的功能 DirectShow 是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft 強烈建議新程式代碼盡可能使用 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 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | control.h (包含 Dshow.h) |
程式庫 | Strmiids.lib |