提问者:小点点

Kinect V2 SDK 2.0基础知识,画骨骼的骨骼?


 private void DrawBody(Body body) //takes body as argument
    {
        // Draw points
        foreach (JointType type in body.Joints.Keys)
        {
            // Draw all the body joints
            switch (type)
            {
                case JointType.Head:
                case JointType.FootLeft:
                case JointType.FootRight:
                    DrawJoint(body.Joints[type], 20, Brushes.Yellow, 2, Brushes.White);
                    break;
                case JointType.ShoulderLeft:
                case JointType.ShoulderRight:
                case JointType.HipLeft:
                case JointType.HipRight:
                     DrawJoint(body.Joints[type], 20, Brushes.YellowGreen, 2, Brushes.White);
                    break;
                case JointType.ElbowLeft:
                case JointType.ElbowRight:
                case JointType.KneeLeft:
                case JointType.KneeRight:
                    DrawJoint(body.Joints[type], 15, Brushes.LawnGreen, 2, Brushes.White);
                    break;
                case JointType.HandLeft:
                    DrawHandJoint(body.Joints[type], body.HandLeftState, 20, 2, Brushes.White);
                    break;
                case JointType.HandRight:
                    DrawHandJoint(body.Joints[type], body.HandRightState, 20, 2, Brushes.White);
                    break;
                default:
                    DrawJoint(body.Joints[type], 15, Brushes.RoyalBlue, 2, Brushes.White);
                    break;
            }                

        }         
    }
   private void DrawJoint(Joint joint, double radius, SolidColorBrush fill, double borderWidth, SolidColorBrush border)
    {
        //If Joint not tracked  then return Joint
        if (joint.TrackingState != TrackingState.Tracked) return;

        // Map the CameraPoint to ColorSpace so they match
        ColorSpacePoint colorPoint = kinectSensor.CoordinateMapper.MapCameraPointToColorSpace(joint.Position);

        // Create the UI element based on the parameters
        Ellipse El = new Ellipse();
        El.Fill = fill;
        El.Stroke = border;
        El.StrokeThickness = borderWidth;
        El.Width = 25;
        El.Height = 25;
        radius = 25;

        // Add the Ellipse to the canvas
        SkeletonCanvas.Children.Add(El);

        // Avoid exceptions based on bad tracking
        if (float.IsInfinity(colorPoint.X) || float.IsInfinity(colorPoint.X)) return;

        // Allign ellipse on canvas
        Canvas.SetLeft(El, colorPoint.X);
        Canvas.SetTop(El, colorPoint.Y);

    }

现在我被卡住了,从这一点开始,我该如何在画布上画出身体每个关节之间的‘骨头',类似于我如何为关节添加日食?。

如有任何帮助,不胜感激


共1个答案

匿名用户

drawbody(Body Body)函数中,需要设置要绘制的“骨头”。例如:

private void DrawBody(Body body)
{
    // left forearm
    DrawBone(body.Joints[JointType.HandLeft], body.Joints[JointType.ElbowLeft]);
    // right forearm
    DrawBone(body.Joints[JointType.HandRight], body.Joints[JointType.ElbowRight]);
    // ...etc...

}

drawbone(Joint,Joint)函数如下所示:

private void DrawBone(Joint first, Joint second)
{
    Line line = new Line();
    line.Stroke = Brushes.LightSteelBlue;

    line.X1 = first.Position.X;
    line.X2 = second.Position.X;
    line.Y1 = first.Position.Y;
    line.Y2 = second.Position.Y;

    line.StrokeThickness = 2;
    myCanvas.Children.Add(line);
}

我在内存中工作,所以语法可能会有点问题。