Alpha 混合 (DirectShow)
[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
[不支援此 API,未來可能會改變或無法使用。]
本文說明 DirectShow Editing Services (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 格式中,將group元素的bitdepth屬性設定為 32 也會完成此動作。
接下來,您需要包含 Alpha 通道的視訊資料。 有數個選項:
- 您可以使用已經具有 32 位 RGB 視訊與 Alpha 資料的 AVI 檔案。 目前不支援 MPEG 或 Microsoft Windows Media Format (WMF) 原始程式檔。
- DES 支援具有 Alpha 資料的 32 位點陣圖 (.bmp) 和 Targa (.tga) 檔案。
- 您可以撰寫自訂來源篩選,以使用 Alpha 建立 32 位 RGB 資料。 輸出媒體類型必須 MEDIASUBTYPE_ARGB32。 使用篩選作為時間軸來源物件中的子物件。
如果您的視訊來源沒有 Alpha,您可以使用建立 Alpha 資料的效果。 Alpha Setter 效果會將整個影像的 Alpha 色板設定為常數值。 若要隨著時間變化 Alpha,請使用 IPropertySetter 介面搭配 Alpha Setter 效果。 只要群組的未壓縮媒體類型 MEDIASUBTYPE_ARGB32,原始來源就不需要是 32 位。
最後,將視訊傳遞至執行 Alpha 混合的效果或轉換。 Compositor Transition會執行 Alpha 混合,而 Key Transition 可以按 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>
相關主題