我正在使用Kinect SDK 1.6,我正在关注 Windows Kinect快速入门系列的 Skeleton Tracking Funamentals 教程,可用here。
即使这些教程是针对SDK 1.0制作的,一切都很顺利,直到我按照说明将我的手的位置映射到自定义大小的窗口(例如1280x720)。< / p>
Dan Fernandez正在使用以下代码行来实现此目标
private void ScalePosition(FrameworkElement element, Joint joint)
{
// Convert the value to X/Y;
Joint scaledJoint = joint.ScaleTo(1280, 720);
....
}
嗯,方法ScaleTo
不是自定义函数,它应该在Kinect SDK中提供,但根据我的编辑器,没有这样的方法。我无法找到它,我认为它可能已被移动/重命名/自SDK 1.0以来的任何内容。
只是为了确保一切正常,这是我的using
列表,其他人(Skeleton tracking等)正在工作,所以我真的无法弄明白
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Kinect;
using Microsoft.Kinect.Toolkit;
using Microsoft.Samples.Kinect.WpfViewers;
我可以根据要求提供有关我的代码的更多详细信息。
答案 0 :(得分:8)
如果你对Coding4Fun有正确的引用,你实际上只是错过了这个:
using Coding4Fun.Kinect.Wpf;
在代码的开头。
答案 1 :(得分:5)
如果您需要ScaleTo()
:
http://c4fkinect.codeplex.com/
它是开源的,所以您也可以使用他们的代码并拥有自己的ScaleTo()
。
请记住添加正确的using指令:
using Coding4Fun.Kinect.Wpf;
答案 2 :(得分:2)
Scaling是Coding4Fun库的一部分,可在此处获得: http://c4fkinect.codeplex.com/
或者,您可以编写自己的缩放。
像这样的东西会创建一个右手跟踪的“命中框”,以右肩为中心,并将其缩放到主屏幕的分辨率。
double xScaled = (rightHand.Position.X - leftShoulder.Position.X) / ((rightShoulder.Position.X - leftShoulder.Position.X) * 2) * SystemParameters.PrimaryScreenWidth;
double yScaled = (rightHand.Position.Y - head.Position.Y) / (rightHip.Position.Y - head.Position.Y) * SystemParameters.PrimaryScreenHeight;
以下是将Kinect坐标缩放到屏幕分辨率的函数的另一个示例:
private static double ScaleY(Joint joint)
{
double y = ((SystemParameters.PrimaryScreenHeight / 0.4) * -joint.Position.Y) + (SystemParameters.PrimaryScreenHeight / 2);
return y;
}
private static void ScaleXY(Joint shoulderCenter, bool rightHand, Joint joint, out int scaledX, out int scaledY)
{
double screenWidth = SystemParameters.PrimaryScreenWidth;
double x = 0;
double y = ScaleY(joint);
// if rightHand then place shouldCenter on left of screen
// else place shouldCenter on right of screen
if (rightHand)
{
x = (joint.Position.X - shoulderCenter.Position.X) * screenWidth * 2;
}
else
{
x = screenWidth - ((shoulderCenter.Position.X - joint.Position.X) * (screenWidth * 2));
}
if (x < 0)
{
x = 0;
}
else if (x > screenWidth - 5)
{
x = screenWidth - 5;
}
if (y < 0)
{
y = 0;
}
scaledX = (int)x;
scaledY = (int)y;
}
答案 3 :(得分:0)
you can fix the error using this dll file
http://c4fkinect.codeplex.com/releases/view/76271