Combinación alfa (DirectShow)
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
[Esta API no se admite y puede modificarse o no estar disponible en el futuro].
En este artículo se describe la combinación alfa en DirectShow Editing Services (DES).
Alfa mide la transparencia de un píxel o imagen. En vídeo RGB sin comprimir de 32 bits, cuatro componentes definen cada píxel: un canal alfa (A) y tres componentes de color (RGB). Un píxel con un valor alfa de cero es completamente transparente. Un píxel con un valor alfa de 255 es opaco. Entre estos valores, el píxel tiene varios grados de transparencia.
DirectShow define dos tipos de medios para vídeo RGB de 32 bits:
- MEDIASUBTYPE_ARGB32: el vídeo es RGB de 32 bits con un canal alfa válido.
- MEDIASUBTYPE_RGB32: los píxeles son de 32 bits, pero el canal alfa no es necesariamente válido.
Para realizar la combinación alfa en DES, establezca el tipo de medio sin comprimir del grupo de vídeos en MEDIASUBTYPE_ARGB32. En C++, llame al método IAMTimelineGroup::SetMediaType . En el formato XTL, al establecer también el atributo bitdepth del elemento group en 32.
A continuación, necesita datos de vídeo que contengan un canal alfa. Hay varias opciones:
- Puede usar un archivo AVI que ya tiene vídeo RGB de 32 bits con datos alfa. Actualmente, alpha no se admite para archivos de origen MPEG o Microsoft Windows Media Format (WMF).
- DES admite archivos de mapa de bits de 32 bits (.bmp) y Targa (.tga) con datos alfa.
- Puede escribir un filtro de origen personalizado que cree datos RGB de 32 bits con alfa. El tipo de medio de salida debe ser MEDIASUBTYPE_ARGB32. Use el filtro como subobjeto en un objeto de origen de escala de tiempo.
Si el origen de vídeo no tiene alfa, puede usar un efecto que cree datos alfa. El efecto de establecedor alfa establece el canal alfa de toda la imagen en un valor constante. Para variar el alfa con el tiempo, use la interfaz IPropertySetter con el efecto alfa establecedor. El origen original no tiene que ser de 32 bits, siempre que el tipo de medio sin comprimir del grupo sea MEDIASUBTYPE_ARGB32.
Por último, pase el vídeo a un efecto o transición que realiza la mezcla alfa. La transición compositor realiza la combinación alfa y la transición de clave puede clave por valor alfa.
El siguiente proyecto XTL de ejemplo realiza la combinación alfa:
<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>
Temas relacionados