[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、IMFMediaEngine和媒體基礎 的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
[此 API 不受支持,未來可能會改變或無法使用。]
本文說明 DirectShow 編輯服務 (DES) 中的 Alpha 混合。
Alpha 會測量圖元或影像的透明度。 在 32 位未壓縮的 RGB 視訊中,四個元件會定義每個圖元:Alpha 色板 (A) 和三個色彩元件 (RGB)。 具有Alpha值為零的像素是完全透明的。 Alpha 值為 255 的像素不透明。 在這些值之間,圖元具有各種程度的透明度。
DirectShow 定義 32 位 RGB 視訊的兩種媒體類型:
- MEDIASUBTYPE_ARGB32:視頻是具有有效 Alpha 通道的 32 位 RGB。
- MEDIASUBTYPE_RGB32:像素是 32 位,但 alpha 通道不一定有效。
若要在 DES 中執行 Alpha 混合,請將影片群組的未壓縮媒體類型設定為MEDIASUBTYPE_ARGB32。 在 C++ 中,呼叫 IAMTimelineGroup::SetMediaType 方法。 在 XTL 格式中,將 群組 元素的 bitdepth 屬性設定為 32 也完成這項作業。
接下來,您需要包含 alpha 通道的視訊數據。 有數個選項:
- 您可以使用已經具有 32 位 RGB 視訊與 Alpha 數據的 AVI 檔案。 目前,MPEG 或 Microsoft Windows Media Format (WMF) 原始程式檔不支援 Alpha。
- DES 支援具有 Alpha 數據的 32 位點陣圖 (.bmp) 和 Targa (.tga) 檔案。
- 您可以撰寫自定義來源篩選,以使用 Alpha 建立 32 位 RGB 數據。 輸出媒體類型必須 MEDIASUBTYPE_ARGB32。 使用篩選做為時間軸來源物件中的子物件。
如果您的視訊來源沒有 Alpha,您可以使用建立 Alpha 數據的效果。 Alpha Setter Effect 會將整個影像的 alpha 通道設定為固定值。 若要隨著時間改變 Alpha,請使用 IPropertySetter 介面與 Alpha 設定效果搭配使用。 只要群組的未壓縮媒體類型 MEDIASUBTYPE_ARGB32,原始來源就不必是 32 位。
最後,將影片傳遞至執行 Alpha 混合的效果或轉換。 Compositor Transition 會執行 Alpha 混合,而 鍵轉換 可以依 Alpha 值進行鍵控。
下列範例 XTL 專案會執行 Alpha 混合:
<timeline>
<group type="video" bitdepth="32" width="320" height="240">
<track>
<clip start="0" stop="6" src="c:\Example.avi" />
</track>
<track>
<clip start="0" stop="6" src="c:\Example2.avi">
<!-- Alpha Setter effect. -->
<effect clsid="{506D89AE-909A-44f7-9444-ABD575896E35}" start="0" stop="6">
<param name="alpha" value="255">
<linear time="6" value="0" />
</param>
</effect>
</clip>
<!-- Key transition, with alpha keying. -->
<transition clsid="{C5B19592-145E-11d3-9F04-006008039E37}" start="0" stop="6">
<param name="KeyType" value="3" />
</transition>
</track>
</group>
</timeline>
相關主題