나는 이와 관련하여 많은 비슷한 게시물을 발견했지만 최근이나 실제로 문제를 해결 한 것은 없습니다. 누군가가 도움이되기를 바랍니다. 이것이 중복되면 죄송합니다. WPF 또는 xaml 전문가가 아니며 다양한 출처의 코드를 함께 자필했습니다.WPF 이미지 오버 비디오 깜박임
시나리오 : -하지 생산을위한
- 키오스크 스타일 앱, 단지 전시 MediaPlayer를를 사용하여 그리드에 배경으로 비디오를 재생하는
- WFP의 응용 프로그램은 브러시
- 키 넥트 센서로 그려지는 사람의 방향 (범위를 벗어남, 범위 및 센서를보고 있음)을 기반으로 비디오 소스를 변경하는 상태 변경 이벤트가있는 사람의 위치 결정
- 3 이미지 컨트롤 (소스를 투명도로 사용하는 PNG 이미지 사용) 맨 위에 사람의 현재 상태를 나타내는 비디오. 상태에 따라 이미지가 접히거나 보입니다.
이미지의 가시성이 바뀌면 이미지 컨트롤에서 모든 것이 깜박임 (흰색 또는 검은 색 배경)이 깜박입니다. 동영상 상단에 비디오를 테스트로 숨기면 플리커가 발생하지 않으므로 이미지와 비디오의 겹침에 대한 렌더링/그리기 문제가 있음을 나타냅니다. 필자는 Microsoft Kinect V2 샘플을 차용하여 거기에서부터 시작했지만, Kinect 자체가이 문제를 일으킬 것이라고 생각하지 않습니다. 모든 PC에서이 동작을 테스트했으며 더 복잡한 응용 프로그램을 실행하는 데 문제가없는 최근의 강력한 시스템입니다. 이미지 예제 코드 스위칭
기본 비디오 설정 코드 (I 어딘가에 그것에 대해 읽을 수 있기 때문에, 나는 그것으로 자신을 오지 않았다)
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 설정 - Doublebuffering은 현대 WPF 애플리케이션에서 더 이상 문제가되지 않습니까? - 가시성 대신 불투명도 사용 - 가시성을 설정하기 전에 비디오를 중지하십시오. (실제 지연 타이머가 없어도 상관 없습니다) - Kinect는 30fps로 실행되지만 "사람 상태 변경"이벤트는 한 번만 해고 교환 코드는 한 번만 발동합니다. 즉, 반복되는 항목을 멈추도록 설정된 플래그가 있습니다.
항상 대부분의 시간을 수행하지는 않습니다.
어떤 도움을
감사합니다, 재로드를 감상 할 수있다
비디오를 컨트롤의 배경에 넣는 것은 조금 비 재래 한 것처럼 보입니다! 대신 동영상을 컨트롤에 넣고 버튼을 버튼 뒤에 놓는 방법을 찾아보십시오. 그 (것)들, 그 (것)들이 어떻게 인 무슨을 더 많은 것 또는보다 적게 붙들고, 그러나 의 위에 아이보다는 오히려 가 있으십시오. 이들 중 하나가 깜박임을 돕는 지 확인하십시오. –
답장을 보내 주셔서 감사합니다. 미디어 요소를 사용할 때 문제가 발생했다는 것을 제외하고는 미디어 플레이어를 사용하는 정확한 이유를 기억하지 못합니다. 비디오를 배치하거나 배치하는 방식과 배치 및 스케일링과 관련하여 비디오를 전환하는 방식 때문일 수 있습니다. 내가 읽은 게시물은 그 방법을 제안했고 깜박임 (이미지를 추가하는 마지막 두 번째 변경)을 제외하고는 나에게 잘 맞았다. 당신의 제안을 시도 할 것입니다. 이미지가 앱 배경으로 클리핑된다는 것을 알았고 내가 사용하고있는 임시 해결책은 동영상의 배경을 배경으로두고 클립으로 찍는 것입니다. –
이제 미디어 요소를 사용하지 않은 이유를 기억합니다. 동영상을 전환 할 때 깜박입니다. Mediaplayer 사용과 관련하여 필자가 읽은 제안은 성능 차이에 관한 것입니다. 또한 이미지 오버레이를 이동하여 배경과 같은 레이어에 있지 않았지만 불행히도 여전히 잘랐습니다. @ Andrew Step은 비디오를 이미지 컨트롤에 넣는 것에 대해 언급했지만, 당신이 의미하는 바를 이해하지 못했습니까? 그것은 mp4 비디오이지만 이미지 소스가 마음에 들지 않았습니까? –