C# 如何使用alpha通道(透明度)播放视频?

C# 如何使用alpha通道(透明度)播放视频?,c#,wpf,animation,video-processing,C#,Wpf,Animation,Video Processing,是否可以在MediaElement或MediaPlayer(C#WPF)中播放透明视频 后面有背景,这样背景就会出现在视频的透明区域 我研究了答案,但没有找到任何答案,希望您能帮助我。我担心MediaElement没有保存必要的信息。但是,颜色键控可能是最简单的解决方案 您需要创建一个视频,其中透明部分转换为127127(RGB),然后在着色器中将其更改为透明 着色器的外观可以如下所示: sampler2D input : register(s0); bool equals(float f1

是否可以在
MediaElement
MediaPlayer
(C#WPF)中播放透明视频 后面有背景,这样背景就会出现在视频的透明区域


我研究了答案,但没有找到任何答案,希望您能帮助我。

我担心MediaElement没有保存必要的信息。但是,颜色键控可能是最简单的解决方案

您需要创建一个视频,其中透明部分转换为127127(RGB),然后在着色器中将其更改为透明

着色器的外观可以如下所示:

sampler2D input : register(s0); 

bool equals(float f1, float f2) 
{ 
    float f = abs(f1 - f2); 
    return f < 0.0001f; 
} 

float4 main(float2 uv : TEXCOORD) : COLOR 
{    
    float4 result = tex2D(input, uv);     

    if( (equals(result.r, 127)) && 
        (equals(result.g, 127)) && 
        (equals(result.b, 127)) ) 
    { 
        // make transparent?!
        result.r = 0; 
        result.g = 0; 
        result.b = 0; 
        result.a = 0; 
    } 

    return result; 
} 
2d输入:寄存器(s0);
布尔等于(浮点f1,浮点f2)
{ 
浮球f=abs(f1-f2);
返回f<0.0001f;
} 
浮动4主(浮动2 uv:TEXCOORD):颜色
{    
float4结果=tex2D(输入,uv);
如果((等于(result.r,127))&&
(等于(结果g,127))&&
(等于(结果b,127)))
{ 
//透明化?!
结果:r=0;
结果:g=0;
结果:b=0;
结果:a=0;
} 
返回结果;
} 

恐怕MediaElement没有保留必要的信息。但是,颜色键控可能是最简单的解决方案

您需要创建一个视频,其中透明部分转换为127127(RGB),然后在着色器中将其更改为透明

着色器的外观可以如下所示:

sampler2D input : register(s0); 

bool equals(float f1, float f2) 
{ 
    float f = abs(f1 - f2); 
    return f < 0.0001f; 
} 

float4 main(float2 uv : TEXCOORD) : COLOR 
{    
    float4 result = tex2D(input, uv);     

    if( (equals(result.r, 127)) && 
        (equals(result.g, 127)) && 
        (equals(result.b, 127)) ) 
    { 
        // make transparent?!
        result.r = 0; 
        result.g = 0; 
        result.b = 0; 
        result.a = 0; 
    } 

    return result; 
} 
2d输入:寄存器(s0);
布尔等于(浮点f1,浮点f2)
{ 
浮球f=abs(f1-f2);
返回f<0.0001f;
} 
浮动4主(浮动2 uv:TEXCOORD):颜色
{    
float4结果=tex2D(输入,uv);
如果((等于(result.r,127))&&
(等于(结果g,127))&&
(等于(结果b,127)))
{ 
//透明化?!
结果:r=0;
结果:g=0;
结果:b=0;
结果:a=0;
} 
返回结果;
} 

是否可能重复?你看到这个了吗?可能是重复的?你看到这个了吗?