共用方式為


Alpha 混合 (DirectShow)

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

使用 DirectShow 編輯服務