Я пытаюсь получить положения X, Y, Z скелетных суставов с помощью двух датчиков Kinect. Пока у меня есть одна простая форма с 2 кнопками и 6 ярлыками. При нажатии на первую кнопку я хотел бы показать позиции x, y, z правой руки в label1,2,3. То же самое я хотел бы сделать со второй кнопкой, но со вторым устройством kinect.
Он хорошо работал с одним Kinect, но когда я добавил код для второго Kinect, было сгенерировано исключение NullReferenceException. Может кто-нибудь, пожалуйста, скажите мне, что я не так? Спасибо.
РЕДАКТИРОВАТЬ:
Окно просмотра:
датчик.СкелетныйПоток.Включить(); 'sensor.SkeletonStream' имеет значение null
Сообщение об исключении: ссылка на объект не указывает на экземпляр объекта.
КОД
public partial class Form1 : Form
{
Skeleton[] skeletons;
Skeleton[] skeletons2;
public Form1()
{
InitializeComponent();
// First Kinect Device
KinectSensor sensor = KinectSensor.KinectSensors[0];
sensor.SkeletonStream.Enable(); // Here is the exception thrown
sensor.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(SensorSkeletonFrameReady);
sensor.Start();
// Second Kinect Device
KinectSensor sensor2 = KinectSensor.KinectSensors[1];
sensor2.SkeletonStream.Enable();
sensor2.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(SensorSkeletonFrameReady2);
sensor2.Start();
}
private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
skeletons = new Skeleton[0];
using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
if (skeletonFrame != null)
{
skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
skeletonFrame.CopySkeletonDataTo(skeletons);
}
}
}
private void SensorSkeletonFrameReady2(object sender, SkeletonFrameReadyEventArgs e)
{
skeletons2 = new Skeleton[0];
using (SkeletonFrame skeletonFrame2 = e.OpenSkeletonFrame())
{
if (skeletonFrame2 != null)
{
skeletons2 = new Skeleton[skeletonFrame2.SkeletonArrayLength];
skeletonFrame2.CopySkeletonDataTo(skeletons2);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
foreach(Skeleton skeleton in skeletons)
{
// get the joint
Joint rightHand = skeleton.Joints[JointType.HandRight];
// get the individual points of the right hand
double rightX = rightHand.Position.X;
double rightY = rightHand.Position.Y;
double rightZ = rightHand.Position.Z;
label1.Text = rightX.ToString();
label2.Text = rightY.ToString();
label3.Text = rightZ.ToString();
}
}
private void button2_Click(object sender, EventArgs e)
{
foreach (Skeleton skeleton in skeletons2)
{
// get the joint
Joint rightHand = skeleton.Joints[JointType.HandRight];
// get the individual points of the right hand
double rightX = rightHand.Position.X;
double rightY = rightHand.Position.Y;
double rightZ = rightHand.Position.Z;
label4.Text = rightX.ToString();
label5.Text = rightY.ToString();
label6.Text = rightZ.ToString();
}
}
}