2017-02-22 10 views
0

Я нашел много подобных сообщений об этом, но ни один из них не является последним или не затрагивает проблему. Надеюсь, кто-то может помочь. Извините, если это дубликат. Я не эксперт WPF или xaml и не копировал код из разных источников.Изображение WPF поверх видео мерцания

Сценарий: -

  • киоска приложение стиль не для производства, только для выставки
  • ВПП приложение воспроизведения видео в качестве фона на сетке с помощью медиаплеера втягивается с помощью кисти датчика
  • Kinect к определить положение человека с событиями изменения состояния, чтобы изменить источник видео на основе ориентации человека (вне диапазона, в диапазоне и глядя на датчик)
  • 3 Управление изображениями (с изображениями PNG с прозрачностью в качестве источника) над верхней частью видео, которые представляют текущее состояние лиц. Изображения свернуты или видны в зависимости от состояния

Все работает так, как я ожидал его, но есть мерцание (или твердый белый или черный фон) на элемент управления Image, когда видимость изображений меняется, когда над верхней частью видео. Если я скрою видео в качестве теста, нет мерцания, что говорит мне о проблеме рендеринга/рисования с разбиением изображений и видео. Я начал с заимствования из образцов Microsoft Kinect V2, а затем оттуда, но я не думаю, что сам Kinect вызовет проблему. Все те ПК, которые я тестировал, демонстрируют это поведение, и все это последние мощные машины, у которых нет проблем с запуском более сложных приложений.

Базовый видео код установки (потому что я читал об этом где-то, я не придумал это сам)

MediaPlayer mp = new MediaPlayer(); 
mp.ScrubbingEnabled = true; 
mp.MediaEnded += MediaElement_MediaEnded; 
mp.MediaOpened += MediaElement_MediaOpened; 
VideoDrawing vd = new VideoDrawing(); 
vd.Player = mp; 
vd.Rect = new Rect(0, 0, 1920, 1080); 
DrawingBrush db = new DrawingBrush(vd); 
grid.Background = db; 

XAML

<Window x:Class="IgnoreYou.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Kinect 2 Face HD (.NET)" 
    Height="735" Width="770" Loaded="Window_Loaded" Closed="Window_Closing" 
    WindowState="Maximized" WindowStyle="None" ResizeMode="NoResize" 
WindowStartupLocation="CenterScreen" 
    Topmost="True" 
    MouseMove="Window_MouseMove"> 

<Grid Name="grid"> 
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Bottom"> 
     <WrapPanel Margin="0,0,0,30"> 
      <Image Name="noPerson" Source="images/noone.png" Stretch="None" > 
      </Image> 
      <Image Name="seenPerson" Source="images/can_you_see.png" Stretch="None" Visibility="Collapsed" > 
      </Image> 
      <Image Name="ignorePerson" Source="images/ignored.png" Stretch="None" Visibility="Collapsed" > 
      </Image> 
     </WrapPanel> 
    </StackPanel> 
</Grid> 

Переключение изображения пример кода (имеется 3 варианта): -

noPerson.Visibility = Visibility.Collapsed; 
ignorePerson.Visibility = Visibility.Visible; 
seenPerson.Visibility = Visibility.Collapsed; 

Я искал разные вещи - Настройка cachemode на изображениях - Двойное буферирование, похоже, больше не связано с современными приложениями WPF? - Использование непрозрачности вместо видимости - Остановка видео до того, как установлен видимость (хотя, вероятно, это не имеет значения без фактического таймера задержки?) - Хотя Kinect стреляет со скоростью 30 кадров в секунду, события события «person state change» один раз, и код переключения срабатывает только один раз, т.е. есть флаги, установленные для остановки повторных записей.

Это не делает все это время, просто в большинстве случаев.

Любая помощь будет оценена

Спасибо, Джаррод

+0

Ввод видео в фон управления кажется немного нетрадиционным! Посмотрите, можете ли вы найти способ поставить видео в элемент управления вместо этого и поместить его за свои кнопки . В противном случае держите вещи более или менее, как они есть, но имеют поверх , а не как ребенок. Посмотрите, помогает ли это в мерцании. –

+0

Спасибо за ответ. Я не могу вспомнить точную причину использования медиаплеера, за исключением того, что у меня были проблемы, когда я использовал элемент мультимедиа, возможно, из-за того, как я переключаю видео или что-то делать с позиционированием и масштабированием. Сообщение, которое я прочитал, предлагало этот метод, и он работал хорошо для меня, кроме мерцания (что было последним вторым изменением для добавления изображений). Попробуй свое предложение. Обнаружилось, что изображения обрезаются на фоне приложения, а временное решение, которое я использую, - это поместить неподвижное видео в фоновом режиме, чтобы оно было скопировано. –

+0

Я помню, почему я не использовал элемент мультимедиа. При переключении видео происходит ужасное мерцание. Предложение, которое я прочитал относительно использования медиаплеера, я думаю, касалось различий в производительности. Я также попытался переместить наложения изображений, чтобы они не находились в том же слое, что и фон, но, к сожалению, все еще обрезаны. @AndrewStephens вы упомянули о включении Video и Image Control, но я не понял, что вы имели в виду? Это видео mp4, но источнику изображения это не понравилось? –

ответ

0

Не нашли реальный ответ, но проблема заключалась в том, что фон позади видео было отсечение через в пространстве, что изображение взял , Я не мог найти способ сделать рендеринг более стабильным.

Видео, которое я использовал, было относительно статическим, т. Е.это был очень короткий цикл, поэтому я взял неподвижный кадр видео и сделал это фон. Вы все еще можете видеть, как он щелкнет между видео и неподвижным в тот момент (если вы знали, что искали), но разница была незначительной в моем случае - она ​​была намного лучше, чем сплошной белый блок, появляющийся на долю секунды ,

Смежные вопросы