CDrawImage 類別

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

類別 CDrawImage 是協助程式類別,可管理影片轉譯器篩選的繪圖。 所有繪圖作業都是使用 GDI 來執行。 此類別不提供使用 DirectDraw 轉譯的任何支援。 類別 CDrawImage 需要擁有篩選準則也使用 CBaseWindow 類別來管理視訊視窗。 建構函式 CDrawImage 會採用 CBaseWindow 物件的指標。

下圖顯示自訂視訊轉譯器篩選中使用此類別的慣用方式。

使用 cdrawimage 的自訂視訊轉譯器

若要使用此類別,請執行下列動作:

配置器

上圖中顯示的篩選會使用自訂配置器類別 CImageAllocator。 此配置器會使用 GDI CreateDIBSection 函式,在共用記憶體中建立 DIB。 配置器所建立的範例為 CImageSample 物件。

如果篩選擁有連接的配置器,則媒體範例保證為 CImageSample 物件。 在此情況下, CDrawImage 物件可以使用 BitBlt 或 StretchBlt 優化繪圖。 否則,它必須使用較慢的 SetDIBitsToDeviceStretchDIBits 函式 。 較快的選項是由 CDrawImage::FastRender 方法實作,由 CDrawImage::SlowRender 方法實作較慢的選項。 (儘管名稱如此,您可能不會在 SlowRender中看到大型效能點擊,特別是在較新的硬體上。)

調色板

如果 FastRender 方法用於繪圖,而且影像會變淡,則篩選準則必須管理調色盤,如下所示:

  • CImageSample類別包含儲存在DIBDATA結構中的調色盤版本號碼。 配置器建立範例時,會初始化此值。
  • CDrawImage類別也包含調色盤版本號碼,其會在建立時初始化。
  • 每當媒體類型變更為新的 palettized 格式時,請呼叫 CDrawImage::IncrementPaletteVersion。 這個方法會遞增 CDrawImage 物件的調色盤版本號碼。 如果篩選準則使用 CImagePalette 類別來管理調色盤資訊,只要在媒體類型變更時呼叫 CImagePalette::P reparePalette 即可。 PreparePalette方法只會在必要時遞增調色盤版本。
  • FastRender方法會比較CDrawImage調色盤版本與範例的調色盤版本。 如果範例的版本號碼落後 CDrawImage 版本號碼, FastRender 方法會呼叫 CDrawImage::UpdateColourTableUpdateColourTable方法會使用 GDI SetDIBColorTable函式,在裝置內容中設定色彩表格。 此外,範例上的調色盤版本也會更新為目前的版本號碼。
  • 如果針腳重新連線,篩選準則應該呼叫 CDrawImage::ResetPaletteVersion 來重設調色盤版本。 在針腳重新連線時,配置器會重新配置所有樣本。
受保護的成員變數 Description
m_bStretch 指出視訊影像是否必須延展以符合目的地視窗。
m_bUsingImageAllocator 指出針腳連接的配置器是否為 CImageAllocator 物件。
m_EndSample 指定最近範例的停止時間。
m_hdc 處理擁有視窗的裝置內容。
m_MemoryDC 處理擁有視窗的記憶體裝置內容。
m_PaletteVersion 用來追蹤調色盤變更的時機。
m_pBaseWindow 擁有 CBaseWindow 物件的指標。
m_pMediaType 目前媒體類型的指標。
m_SourceRect 指定繪製的來源矩形。
m_StartSample 指定最近範例的開始時間。
m_TargetRect 指定繪製的目標矩形。
保護方法 Description
DisplaySampleTimes 在視訊影像頂端繪製媒體範例的時間戳記。
FastRender 使用 BitBltStretchBlt 函式繪製影片影像。
SetStretchMode 計算是否必須延展視訊影像。
SlowRender 使用 SetDIBitsToDeviceStretchDIBits 函式繪製視訊影像。
UpdateColourTable 使用新的調色盤更新色彩表。
公用方法 Description
CDrawImage 建構函式方法。
DrawImage 在視訊視窗上繪製視訊框架。
DrawVideoImageHere 將影像從媒體範例繪製到指定的裝置內容。
GetPaletteVersion 擷取調色盤版本。
GetSourceRect 擷取目前的來源矩形。
GetTargetRect 擷取目前的目的地矩形。
IncrementPaletteVersion 遞增調色盤版本。
NotifyAllocator CDrawImage通知物件連接配置器是否為CImageAllocator物件。
NotifyEndDraw 不支援。
NotifyMediaType 通知目前媒體類型的 物件。
NotifyStartDraw 不支援。
ResetPaletteVersion 重設調色盤版本。
ScaleSourceRect 如果原生視訊大小與媒體類型格式之間有差異,請調整指定的來源矩形。 虛擬。
SetDrawCoNtext 設定用於繪圖的裝置內容。
SetSourceRect 設定來源矩形。
SetTargetRect 設定目標矩形。
UsingImageAllocator 指出目前的配置器是否為 CImageAllocator 物件。

規格需求

需求
標頭
Winutil.h (包含 Streams.h)
程式庫
Strmbase.lib (零售組建) ;
Strmbasd.lib (偵錯組建)