Alpha Blending (DirectShow)
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 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) 源文件不支持 alpha。
- DES 支持 32 位位位图 (.bmp) 和 Targa (.tga) 包含 alpha 数据的文件。
- 可以编写使用 alpha 创建 32 位 RGB 数据的自定义源筛选器。 输出媒体类型必须是 MEDIASUBTYPE_ARGB32。 将筛选器用作时间线源对象中的子对象。
如果视频源没有 alpha,则可以使用创建 alpha 数据的效果。 Alpha Setter 效果将整个图像的 alpha 通道设置为常量值。 若要随时间变化 alpha,请将 IPropertySetter 接口与 Alpha Setter 效果结合使用。 只要组的未压缩媒体类型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>
相关主题