Я нашел много подобных сообщений об этом, но ни один из них не является последним или не затрагивает проблему. Надеюсь, кто-то может помочь. Извините, если это дубликат. Я не эксперт 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» один раз, и код переключения срабатывает только один раз, т.е. есть флаги, установленные для остановки повторных записей.
Это не делает все это время, просто в большинстве случаев.
Любая помощь будет оценена
Спасибо, Джаррод
Ввод видео в фон управления кажется немного нетрадиционным! Посмотрите, можете ли вы найти способ поставить видео в элемент управления вместо этого и поместить его за свои кнопки . В противном случае держите вещи более или менее, как они есть, но имеют поверх , а не как ребенок. Посмотрите, помогает ли это в мерцании. –
Спасибо за ответ. Я не могу вспомнить точную причину использования медиаплеера, за исключением того, что у меня были проблемы, когда я использовал элемент мультимедиа, возможно, из-за того, как я переключаю видео или что-то делать с позиционированием и масштабированием. Сообщение, которое я прочитал, предлагало этот метод, и он работал хорошо для меня, кроме мерцания (что было последним вторым изменением для добавления изображений). Попробуй свое предложение. Обнаружилось, что изображения обрезаются на фоне приложения, а временное решение, которое я использую, - это поместить неподвижное видео в фоновом режиме, чтобы оно было скопировано. –
Я помню, почему я не использовал элемент мультимедиа. При переключении видео происходит ужасное мерцание. Предложение, которое я прочитал относительно использования медиаплеера, я думаю, касалось различий в производительности. Я также попытался переместить наложения изображений, чтобы они не находились в том же слое, что и фон, но, к сожалению, все еще обрезаны. @AndrewStephens вы упомянули о включении Video и Image Control, но я не понял, что вы имели в виду? Это видео mp4, но источнику изображения это не понравилось? –