Хорошо, я нашел решение.4 простых шага.
1) Скачать и установить Эффекты шейдера BuildTask и шаблоны
2) Скачать Библиотека WPF Pixel Shader .Откройте решение в папке 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) полностью прозрачным.И он будет работать как с изображениями, так и с видео.
Мне действительно было трудно этого добиться, я надеюсь, что это пригодится всем, кто читает это:).
Спасибо!