我正在使用XNA Framework 4.0
and开发游戏Kinect 1.6 SDK
。我的代码使用颜色、深度和骨架数据,所以我使用的是AllFramesReady
事件。
当我运行游戏并检测到有人时,由AllFramesReady
事件触发的函数会提取人的图像和骨骼数据并设置我的Player
类的属性。
问题是,这段代码过去可以完美运行。但是即使我没有对我的代码进行任何更改,它现在也无法正常工作。我在其他电脑上试了一下,效果很好。但是相同的代码在我的计算机上不起作用。
当我调试时,我看到DepthFrameEventReadyArgs
并ColorFrameEventReadyArgs
调用了一个成员isInvalid
并将它们设置为 true。因此,当我使用:
DepthImageFrame depthVideoFrame = mainFrame.OpenDepthImageFrame();
...我得到一个 null depthVideoFrame
。同样适用于彩色框架。
这是我初始化 Kinect 的地方(在Initialize
):
if (KinectSensor.KinectSensors.Count > 0)
{
kinect = KinectSensor.KinectSensors[0];
EnableColorStream(kinect);
EnableDepthStream(kinect);
EnableSkeletonStream(kinect);
kinect.AllFramesReady += new EventHandler<AllFramesReadyEventArgs>(kinect_AllFramesReady);
kinect.Start();
}
启用方法:
void EnableColorStream(KinectSensor ks)
{
ks.ColorStream.Enable(ColorFormat);
colorWidth = ks.ColorStream.FrameWidth;
colorHeight = ks.ColorStream.FrameHeight;
colorVideo = new Texture2D(graphics.GraphicsDevice, ks.ColorStream.FrameWidth, ks.ColorStream.FrameHeight);
}
void EnableDepthStream(KinectSensor ks)
{
ks.DepthStream.Enable(DepthFormat);
depthWidth = ks.DepthStream.FrameWidth;
depthHeight = ks.DepthStream.FrameHeight;
depthVideo = new Texture2D(graphics.GraphicsDevice, ks.DepthStream.FrameWidth, ks.DepthStream.FrameHeight);
}
void EnableSkeletonStream(KinectSensor ks)
{
TransformSmoothParameters tsp = new TransformSmoothParameters();
tsp.Smoothing = 0f;
tsp.Correction = 0.1f;
tsp.Prediction = 0.1f;
tsp.JitterRadius = 0.1f;
tsp.MaxDeviationRadius = 0.1f;
ks.SkeletonStream.Enable(tsp);
}
在kinect_AllFramesReady
我使用类似的东西:
using (ColorImageFrame colorVideoFrame = imageFrames.OpenColorImageFrame())
{
...
}
using (SkeletonFrame skeletonFrame = imageFrames.OpenSkeletonFrame())
{
...
}
using (DepthImageFrame depthVideoFrame = imageFrames.OpenDepthImageFrame())
{
...
}
当我调试时,我看到值是colorVideoFrame
,因为member 设置为。当我使用深度和颜色数据运行其他程序时,它们运行正常,但只有这个不工作。我目前没有想法。谢谢你的帮助。depthVideoFrame
null
isInvalid
true