共用方式為


Alpha 混合技術(DirectShow)

[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngine和媒體基礎 的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayerIMFMediaEngine 音訊/視訊擷取,而不是 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>

使用 DirectShow 編輯服務