Share via


IBasicVideo::GetCurrentImage 方法 (control.h)

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

另請參閱

錯誤和成功碼

IBasicVideo 介面