2012-12-18 5 views
3

기본적으로 C † & Kinect SDK (완료)를 사용하여 kinect 스켈레톤 프레임 데이터 (조인트 위치)를 파일로 작성한 다음이 데이터를 외부에서 처리 (완료) 한 다음 내 응용 프로그램에 데이터를 다시 읽고 (done), 프레임별로 가벼운 point walker (skeleton joints)로 데이터를 그리면 애니메이션을 볼 수 있습니다. (문제)파일에서 화면으로 뼈대 애니메이션 그리기

내 질문 : C# 및 DrawingContext 클래스를 사용하여이 30fps 애니메이션을 어떻게 가져올 수 있습니까?

녹음 중에 이미 SkeletonFrames의 라이브 출력에 사용하고 있기 때문에 DrawingContext를 사용하고 싶습니다. 거기는 단순히 "해골 기본"SDK 예제와 유사한이 같이 이루어집니다 :

this.sensor.SkeletonFrameReady += this.SensorSkeletonFrameReady; 
... 

private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) 
    { 
     ... 

     using (DrawingContext dc = this.drawingGroup.Open()) 
     { 
     ... 
      dc.DrawEllipse(drawBrush, null, 2Dpoint, JointThickness, JointThickness); 

     } 
    } 

그래서 키 넥트가에서 약 프레임으로 날을 제공합니다. 30fps는 이벤트를 사용하고 데이터를 그립니다.

그러나 kinect가없고 파일/메모리에서 데이터를 읽으면 어떻게 그려야합니까? (현재 2DArray [프레임, 조인트])

나는 비슷한 이벤트를 보내거나 직접 그립니다 30fps (프레임 속도를 달성하기 위해 수면을 사용)에서 실행하는 스레드에 대해 생각 ..하지만이 작업을 얻으려면 내 시도 완전히 실패했습니다. 예를 들어 이벤트를 드로잉을 위해 메인 스레드로 보내지 않았다.

문제는 내가이가 및 작업 집합 얻을 수있는 방법에 대한

어떤 힌트 ... C 번호를 (내가 그것을 완전히 새로운 해요) 이해 나의 부족이 될 수 있는가?

답변

5

Kinect Toolbox은 이미 스트림 데이터 (세 가지 중 하나)를 저장하고 재생하는 방법을 제공합니다. 그것은 당신이 필요로하는 것을 위해 구멍을 채울 것입니다.

자신 만의 롤을 선택하면 파일에 저장된 각 스켈레톤과 함께 0 기준 타임 스탬프를 저장해야합니다. 그런 다음 재생할 때 DispatcherTimer 또는 Timer을 사용하여 0에서 언제까지 카운트 할 수 있습니다. 타이머가 다음 뼈대에 대한 적절한 타임 스탬프 값에 도달하면이를 표시하십시오.

지적했듯이, Kinect는 을 줄 것입니다. 30fps 30fps로 실행되고 있다고 가정하고 싶지는 않습니다. 필요할 때 다시 재생하려면 타임 스탬프를 사용하십시오 (30fps 또는 15fps가 될 수 있음)

+1

DispatcherTimer를 사용하면 잘 작동합니다. 감사합니다! – Cassio

관련 문제