Зеленый экран в WPF - PullRequest
       4

Зеленый экран в WPF

3 голосов
/ 05 марта 2011

У нас есть видео, которое нам нужно показать в кнопке, но мы хотим, чтобы фон кнопки отображался, и мы не можем поместить фон в видео, потому что кнопка может изменить размер, и фон нуждаетсярастянуть до размера кнопки, но не видео.Видео должно сохранять соотношение размеров, поэтому мне интересно, есть ли способ сделать что-то вроде зеленого экрана в WPF, чтобы мы могли поместить зеленый фон на видео, и чтобы кнопка игнорировала его, чтобы отобразить его собственныйСправочная информация.

Я знаю, что это длинный выстрел, но любые предложения очень приветствуются.

Спасибо!

Ответы [ 2 ]

8 голосов
/ 07 марта 2011

Хорошо, я нашел решение.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) полностью прозрачным.И он будет работать как с изображениями, так и с видео.

Мне действительно было трудно этого добиться, я надеюсь, что это пригодится всем, кто читает это:).

Спасибо!

0 голосов
/ 05 марта 2011

Выполните поиск по запросу "chromakey wpf effect" для множества примеров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...