WPF中的绿屏

时间:2011-03-05 00:51:58

标签: wpf video

我们需要在按钮中显示视频,但我们希望按钮的背景显示,我们无法将背景放在视频中,因为按钮可以更改大小和背景需求拉伸到按钮的大小,但不是视频。视频必须保持其大小比例,所以我想知道是否有办法在WPF中做绿色屏幕,所以我们可以在视频上设置绿色背景,并让按钮忽略它以显示自己的背景

我知道这是一个很长的镜头,但任何建议都是非常受欢迎的。

谢谢!

2 个答案:

答案 0 :(得分:8)

好的,我找到了解决方案。 4个简单的步骤。

1)下载并安装Shader Effects BuildTask and Templates

2)下载WPF Pixel Shader library。在MainSolution文件夹中打开解决方案,右键单击WPFShaderEffectLibrary进行编译,然后将已编译的DLL的引用添加到项目中。注意:只编译WPFShaderEffectLibrary,如果您尝试编译整个解决方案,它可能无法正常工作。

3)使用像素着色器如下(我在MainWindow构造函数中使用它,但这并不重要):

public MainWindow()
{
    InitializeComponent();

    ColorKeyAlphaEffect effect = new ColorKeyAlphaEffect();

    Brush brush = Effect.ImplicitInput;

    effect.Input = brush;

    // This is the Image control in your xaml. It should contain 
    // the image in which you want the green screen effect
    imageControl.Effect = effect;
}

你需要这个库:

using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Effects;
using ShaderEffectLibrary;

4)着色器只适用于黑色,因此有些东西你需要改变才能使它与绿色(或你喜欢的任何其他颜色)一起使用,在我的情况下,我希望它能够使用绿色(如一个绿屏),所以我改变了效果的价值。在从Codeplex下载的解决方案中,您必须转到WPFShaderEffectLibrary项目 - > ShaderSource文件夹ColorKeyAlpha.fx文件。在那里,您必须更改以下代码:

    float4 main(float2 uv : TEXCOORD) : COLOR
    {
       float4 color = tex2D( implicitInputSampler, uv );

       // FROM THIS
       if( color.r + color.g + color.b < 0.3 ) {
          color.rgba = 0;
       }

       return color;
    }

到此

float4 main(float2 uv : TEXCOORD) : COLOR
{
   float4 color = tex2D( implicitInputSampler, uv );

   // TO THIS
   if( color.r == 0 && color.g == 1.0 && color.b == 0 ) {
      color.rgba = 0;
   }

   return color;
}

完成后,重新编译WPFShaderEffectLibrary项目,并更新项目中的引用(步骤#2中的引用)。更新参考后,PixelShader将开始使绿色值(R = 0,G = 255,B = 0)完全透明。它既适用于图像和视频。

我真的很难实现这一目标,我希望对于阅读此内容的任何人都有用:)。

谢谢!

答案 1 :(得分:0)

针对各种示例搜索“chromakey wpf效果”