Cas*_*sio 3 c# frame-rate kinect drawingcontext
我基本上要做的是使用C#和Kinect SDK(完成)将kinect骨架框架数据(关节位置)写入文件,然后在外部处理(完成),然后将数据读回我的应用程序(完成)并逐帧绘制数据作为光点步行者(骨架关节),所以我看到一个动画.(问题)
我的问题是:如何使用C#(及其DrawingContext类)绘制这个30fps的动画?
我想使用DrawingContext,因为我在录制时已经将它用于SkeletonFrames的实时输出.它就像这样完成,类似于"Skeleton Basics"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);
}
}
Run Code Online (Sandbox Code Playgroud)
所以kinect为我提供了大约的框架.30fps使用事件,我只是绘制数据.
但是,如果没有kinect但是从文件/内存中读取数据,我该如何绘制?(目前使用2DArray [Frame,Joint])
我想过让一个线程以30fps的速度运行(使用sleep来实现帧率)然后发送一个类似的事件或者直接绘制..但是我试图让这个工作完全失败了.例如,我没有将事件发送到主线程进行绘制.
问题可能是我缺乏对C#的理解(我对它完全陌生)......
关于我如何设置和工作的任何提示?
该Kinect的工具箱已经提供了一种方法来保存和回放流数据(这三个中的任何一个).它可能填补你需要的空缺.
如果您选择自己滚动,则需要保存基于零的时间戳,并将每个骨架保存到文件中.然后,当您希望重放它时,您可以使用DispatcherTimer或Timer从0开始计数到每当 - 当计时器达到下一个骨架的正确时间戳值时,显示它.
正如你所指出的那样,Kinect会给你约.30 fps.你不想假设它以30 fps的速度运行.使用时间戳以便在应该播放时(可以是30 fps,或15 fps)