Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF中的绿屏_Wpf_Video - Fatal编程技术网

WPF中的绿屏

WPF中的绿屏,wpf,video,Wpf,Video,我们需要在按钮中显示一个视频,但我们希望按钮的背景显示出来,我们不能将背景放在视频中,因为按钮可以改变大小,背景需要拉伸到按钮的大小,而不是视频。视频必须保持其大小比例,因此我想知道是否有一种方法可以在WPF中使用绿色屏幕,这样我们可以在视频上放置绿色背景,并让按钮忽略它以显示其自身的背景 我知道这是一个远大的希望,但任何建议都是非常欢迎的 谢谢 搜索“chromakey wpf效应”的各种示例好的,我找到了解决方案。4个简单的步骤 1) 下载并安装 2) 下载。在MainSolution文件夹

我们需要在按钮中显示一个视频,但我们希望按钮的背景显示出来,我们不能将背景放在视频中,因为按钮可以改变大小,背景需要拉伸到按钮的大小,而不是视频。视频必须保持其大小比例,因此我想知道是否有一种方法可以在WPF中使用绿色屏幕,这样我们可以在视频上放置绿色背景,并让按钮忽略它以显示其自身的背景

我知道这是一个远大的希望,但任何建议都是非常欢迎的


谢谢

搜索“chromakey wpf效应”的各种示例

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

1) 下载并安装

2) 下载。在MainSolution文件夹中打开解决方案,右键单击WPFShaderEffectLibrary以编译它,然后将对已编译DLL的引用添加到项目中。注意:只编译WPFShaderEffectLibrary,如果您试图编译整个解决方案,它可能不会工作

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

您将需要以下库:

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;
    }
完成后,重新编译WPFShaderEffectLibrary项目,并更新项目中的引用(步骤2中的引用)。更新参考后,PixelShader将开始使绿色值(R=0,G=255,B=0)完全透明。它可以处理图像和视频

我真的很难做到这一点,我希望这对任何人都有用:)


谢谢

哈哈,我搜索了一下,我得到的只是一个链接到这个答案。还有其他建议吗?找到并发布了答案。谢谢你的建议。哦,老兄,我想我已经没有了。。。你发现什么并发症了吗?是的。。。我找到了所有的东西。。。没关系。我面临的问题是,你能给我一些建议吗?所以我使用着色器DLL并使用一些东西,比如TransitionEffect=new RippleTransitionEffect();并重置动画this.Player1.Effect=null;但当我最大化WPF窗口时,全屏动画完全冻结。(我使用2 MedieElement。)我知道这是一个非常老的问题,但当我尝试执行您所做的操作时,视频绿色屏幕没有被替换,而且visual studio抱怨“用户指定的像素着色器无效”
    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;
}