Xna Kinect零深度和颜色框架

Xna Kinect零深度和颜色框架,xna,null,frame,kinect,Xna,Null,Frame,Kinect,我正在使用xnaframework4.0和Kinect 1.6sdk开发一个游戏。我的代码使用的是颜色、深度和骨架数据,因此我使用的是allframesradyevent 当我运行游戏并且有人要检测时,由AllFramesReady事件触发的函数提取人物的图像和骨架数据,并设置我的Player类的属性 问题是,这段代码过去工作得很好。但即使我没有对我的代码做任何更改,它现在也不起作用。我在其他电脑上试过,效果很好。但同样的代码在我的电脑上不起作用 调试时,我看到DepthFrameEventRe

我正在使用
xnaframework4.0
Kinect 1.6sdk
开发一个游戏。我的代码使用的是颜色、深度和骨架数据,因此我使用的是
allframesrady
event

当我运行游戏并且有人要检测时,由
AllFramesReady
事件触发的函数提取人物的图像和骨架数据,并设置我的
Player
类的属性

问题是,这段代码过去工作得很好。但即使我没有对我的代码做任何更改,它现在也不起作用。我在其他电脑上试过,效果很好。但同样的代码在我的电脑上不起作用

调试时,我看到
DepthFrameEventReadyArgs
ColorFrameEventReadyArgs
有一个名为
isInvalid
的成员,它们被设置为true。因此,当我使用:

DepthImageFrame depthVideoFrame=mainFrame.OpenDepthImageFrame()

。。。我得到一个空的
depthVideoFrame
。同样适用于彩色框架

这里是我初始化Kinect的地方(在
初始化
):

kinect\u AllFramesReady
中,我使用了类似于:

using (ColorImageFrame colorVideoFrame = imageFrames.OpenColorImageFrame())
{
   ...
}
using (SkeletonFrame skeletonFrame = imageFrames.OpenSkeletonFrame())
{
   ...
}
using (DepthImageFrame depthVideoFrame = imageFrames.OpenDepthImageFrame())
{
   ...
}

调试时,我看到
colorVideoFrame
depthVideoFrame
的值为
null
,因为
isInvalid
成员设置为
true
。当我使用深度和颜色数据运行其他程序时,它们运行正常,但只有这个程序不工作。我现在没有主意了。谢谢你的帮助。

也许你可以试试这个。正如一位评论者所建议的,您可能会遇到此错误,因为您只调用过AllFramesReady。您可能需要在SkeletonFrame、ColorFrame和DepthFrameReady事件处理程序中分别调用它。前

void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
 DepthImageFrame imageFrame = e.OpenDepthImageFrame();
 if (imageFrame != null)
 {
   // Do your business here
 }
}
我之所以选择这个答案,是因为Kinect for Windows SDK文档中指出,“新的ColorImageFrame对象中有一帧颜色数据,如果数据不再可用,则为NULL。”而且由于您的计算机的设置可能与您的代码所使用的其他计算机不同,K4WSDK或编译器中的任何变化都可能会在编译程序后极大地改变程序的运行方式


至于这不起作用的原因,可能是您机器上的编译器问题。您是否检查了VS中的编译器版本是否相同?它是VS的同一版本吗?此外,您是否已检查您的计算机上是否存在所有适当的库和包含?如果你真的想确定根本原因,你可以在工作的机器上一步一步地与你自己的机器进行比较

请包括您用于初始化Kinect和捕获事件的代码。我已在主消息中添加了一些代码。我还无法尝试这些代码,但您是否尝试使用单个
FrameReady
事件而不是
AllFramesReady
?没有,但我认为这不是问题所在。正如我之前所说的,这段代码过去工作得很好。我很确定代码的结构没有问题。我认为问题在于“isInvalid”属性是否正确。我想知道是什么原因造成的。
using (ColorImageFrame colorVideoFrame = imageFrames.OpenColorImageFrame())
{
   ...
}
using (SkeletonFrame skeletonFrame = imageFrames.OpenSkeletonFrame())
{
   ...
}
using (DepthImageFrame depthVideoFrame = imageFrames.OpenDepthImageFrame())
{
   ...
}
void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
 DepthImageFrame imageFrame = e.OpenDepthImageFrame();
 if (imageFrame != null)
 {
   // Do your business here
 }
}