我们一直在努力使用Kinect教程大约一个月,虽然我们已经将大部分代码从Beta2更新到v1.8,但是有一个逻辑错误,我们没有修复的知识或理解。
基本上,一个小循环试图读取skeletonSet变量中的每个单独元素,但是我们不断收到错误消息“无法找到源类型'Microsoft.Kinect.SkeletonFrame'的查询模式的实现。” “没找到”。
void runtime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
SkeletonFrame skeletonSet = e.OpenSkeletonFrame();
Skeleton data = (from s in skeletonSet // <- Here is the error
where s.TrackingState == SkeletonTrackingState.Tracked
select s).FirstOrDefault();
if (data != null)
{
SetEllipsePosition(Head, data.Joints[JointType.Head]);
SetEllipsePosition(leftHand, data.Joints[JointType.HandLeft]);
SetEllipsePosition(rightHand, data.Joints[JointType.HandRight]);
ProcessGesture(data.Joints[JointType.Head], data.Joints[JointType.HandLeft], data.Joints[JointType.HandRight]);
}
}
有没有人知道SkeletonFrame变量的解决方案或解释,以及什么会阻止此代码工作?
答案 0 :(得分:0)
您不应直接使用SkeletonFrame
- 使用方法CopySkeletonDataTo
将骨架数据复制到Skeletons数组中。之后,您可以使用骨架数组。并且不要忘记丢弃你打开的SkeletonFrame。
<强> 1。在类中定义一个将接收骨架数据的字段:
private Skeleton[] mySkeletons;
<强> 2。打开SkeletonFrame并复制骨架数据
private void OnSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
bool haveSkeletons = false
using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
if (null != skeletonFrame)
{
if ((null == mySkeletons) || (mySkeletons.Length != skeletonFrame.SkeletonArrayLength))
{
mySkeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
}
skeletonFrame.CopySkeletonDataTo(mySkeletons);
haveSkeletons = true;
}
}
第3。使用复制的骨架数据
if (haveSkeletons)
{
Skeleton data = (from s in mySkeletons
where s.TrackingState == SkeletonTrackingState.Tracked
select s).FirstOrDefault();
}
}