2017-02-22 1 views
0

나는 이와 관련하여 많은 비슷한 게시물을 발견했지만 최근이나 실제로 문제를 해결 한 것은 없습니다. 누군가가 도움이되기를 바랍니다. 이것이 중복되면 죄송합니다. 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로 실행되지만 "사람 상태 변경"이벤트는 한 번만 해고 교환 코드는 한 번만 발동합니다. 즉, 반복되는 항목을 멈추도록 설정된 플래그가 있습니다.

항상 대부분의 시간을 수행하지는 않습니다.

어떤 도움을

감사합니다, 재로드를 감상 할 수있다

+0

비디오를 컨트롤의 배경에 넣는 것은 조금 비 재래 한 것처럼 보입니다! 대신 동영상을 컨트롤에 넣고 버튼을 버튼 뒤에 놓는 방법을 찾아보십시오. 그 (것)들, 그 (것)들이 어떻게 인 무슨을 더 많은 것 또는보다 적게 붙들고, 그러나 의 위에 아이보다는 오히려 가 있으십시오. 이들 중 하나가 깜박임을 돕는 지 확인하십시오. –

+0

답장을 보내 주셔서 감사합니다. 미디어 요소를 사용할 때 문제가 발생했다는 것을 제외하고는 미디어 플레이어를 사용하는 정확한 이유를 기억하지 못합니다. 비디오를 배치하거나 배치하는 방식과 배치 및 스케일링과 관련하여 비디오를 전환하는 방식 때문일 수 있습니다. 내가 읽은 게시물은 그 방법을 제안했고 깜박임 (이미지를 추가하는 마지막 두 번째 변경)을 제외하고는 나에게 잘 맞았다. 당신의 제안을 시도 할 것입니다. 이미지가 앱 배경으로 클리핑된다는 것을 알았고 내가 사용하고있는 임시 해결책은 동영상의 배경을 배경으로두고 클립으로 찍는 것입니다. –

+0

이제 미디어 요소를 사용하지 않은 이유를 기억합니다. 동영상을 전환 할 때 깜박입니다. Mediaplayer 사용과 관련하여 필자가 읽은 제안은 성능 차이에 관한 것입니다. 또한 이미지 오버레이를 이동하여 배경과 같은 레이어에 있지 않았지만 불행히도 여전히 잘랐습니다. @ Andrew Step은 비디오를 이미지 컨트롤에 넣는 것에 대해 언급했지만, 당신이 의미하는 바를 이해하지 못했습니까? 그것은 mp4 비디오이지만 이미지 소스가 마음에 들지 않았습니까? –

답변

0

진짜 답을 찾을하지 못했지만, 문제는 이미지가 걸린 비디오 뒤의 배경이 공간을 통해 클리핑 된 것이 었습니다 . 렌더링을보다 안정적으로 만들 수있는 방법을 찾지 못했습니다.

내가 사용하고있는 비디오는 비교적 정적입니다.매우 짧은 루프 였기 때문에 비디오의 스틸 프레임을 가져 와서 배경을 만들었습니다. 그 시점에서 비디오와 정지 영상 사이에서 여전히 화면을 볼 수 있습니다 (당신이 찾고있는 것을 알고 있다면). 그러나 제 경우에는 그 차이가 무시할 수 있습니다. 또한 두 번째 분할로 나타나는 단색의 흰색 블록보다 훨씬 낫습니다. .