CDrawImage 類別
[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
類別 CDrawImage
是協助程式類別,可管理影片轉譯器篩選的繪圖。 所有繪圖作業都是使用 GDI 來執行。 此類別不提供使用 DirectDraw 轉譯的任何支援。 類別 CDrawImage
需要擁有篩選準則也使用 CBaseWindow 類別來管理視訊視窗。 建構函式 CDrawImage
會採用 CBaseWindow 物件的指標。
下圖顯示自訂視訊轉譯器篩選中使用此類別的慣用方式。
若要使用此類別,請執行下列動作:
- 當針腳連線時,呼叫 CDrawImage::NotifyMediaType 和 CDrawImage::NotifyAllocator 方法。
- 每當媒體類型變更時,請再次呼叫 NotifyMediaType 。
- 在任何轉譯發生之前,請呼叫 CDrawImage::SetDrawCoNtext。
- 如果來源矩形變更,則呼叫 CDrawImage::SetSourceRect ;如果目標矩形變更,則呼叫 CDrawImage::SetTargetRect 。
- 管理 Palettized 影像的調色盤,如下列調色盤一節所述。
配置器
上圖中顯示的篩選會使用自訂配置器類別 CImageAllocator。 此配置器會使用 GDI CreateDIBSection 函式,在共用記憶體中建立 DIB。 配置器所建立的範例為 CImageSample 物件。
如果篩選擁有連接的配置器,則媒體範例保證為 CImageSample 物件。 在此情況下, CDrawImage 物件可以使用 BitBlt 或 StretchBlt 優化繪圖。 否則,它必須使用較慢的 SetDIBitsToDevice 或 StretchDIBits 函式 。 較快的選項是由 CDrawImage::FastRender 方法實作,由 CDrawImage::SlowRender 方法實作較慢的選項。 (儘管名稱如此,您可能不會在 SlowRender中看到大型效能點擊,特別是在較新的硬體上。)
調色板
如果 FastRender 方法用於繪圖,而且影像會變淡,則篩選準則必須管理調色盤,如下所示:
- CImageSample類別包含儲存在DIBDATA結構中的調色盤版本號碼。 配置器建立範例時,會初始化此值。
- CDrawImage類別也包含調色盤版本號碼,其會在建立時初始化。
- 每當媒體類型變更為新的 palettized 格式時,請呼叫 CDrawImage::IncrementPaletteVersion。 這個方法會遞增 CDrawImage 物件的調色盤版本號碼。 如果篩選準則使用 CImagePalette 類別來管理調色盤資訊,只要在媒體類型變更時呼叫 CImagePalette::P reparePalette 即可。 PreparePalette方法只會在必要時遞增調色盤版本。
- FastRender方法會比較CDrawImage調色盤版本與範例的調色盤版本。 如果範例的版本號碼落後 CDrawImage 版本號碼, FastRender 方法會呼叫 CDrawImage::UpdateColourTable。 UpdateColourTable方法會使用 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 | 使用 BitBlt 或 StretchBlt 函式繪製影片影像。 |
SetStretchMode | 計算是否必須延展視訊影像。 |
SlowRender | 使用 SetDIBitsToDevice 或 StretchDIBits 函式繪製視訊影像。 |
UpdateColourTable | 使用新的調色盤更新色彩表。 |
公用方法 | Description |
CDrawImage | 建構函式方法。 |
DrawImage | 在視訊視窗上繪製視訊框架。 |
DrawVideoImageHere | 將影像從媒體範例繪製到指定的裝置內容。 |
GetPaletteVersion | 擷取調色盤版本。 |
GetSourceRect | 擷取目前的來源矩形。 |
GetTargetRect | 擷取目前的目的地矩形。 |
IncrementPaletteVersion | 遞增調色盤版本。 |
NotifyAllocator |
CDrawImage 通知物件連接配置器是否為CImageAllocator物件。 |
NotifyEndDraw | 不支援。 |
NotifyMediaType | 通知目前媒體類型的 物件。 |
NotifyStartDraw | 不支援。 |
ResetPaletteVersion | 重設調色盤版本。 |
ScaleSourceRect | 如果原生視訊大小與媒體類型格式之間有差異,請調整指定的來源矩形。 虛擬。 |
SetDrawCoNtext | 設定用於繪圖的裝置內容。 |
SetSourceRect | 設定來源矩形。 |
SetTargetRect | 設定目標矩形。 |
UsingImageAllocator | 指出目前的配置器是否為 CImageAllocator 物件。 |
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|