示例#1
0
        void kSensor_AllFramesReady(object sender, AllFramesReadyEventArgs e)
        {
            using (var frame = e.OpenColorImageFrame())
            {
                if (frame != null)
                {
                    pbStream.Image = CreateBitmapFromSensor(frame);
                }
            }

            using (var frame = e.OpenSkeletonFrame())
            {
                if (frame != null)
                {
                    var skeletons = new Skeleton[frame.SkeletonArrayLength];
                    frame.CopySkeletonDataTo(skeletons);
                    var TrackedSkeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);

                    if (TrackedSkeleton != null)
                    {
                        ColorImagePoint leftshoulderpoint = KinectController.GetColorImagePointFromSkeletonPoint(
                            kController.KsResult.KSensor, TrackedSkeleton, JointType.ShoulderLeft
                            );

                        ColorImagePoint rightshoulderpoint = KinectController.GetColorImagePointFromSkeletonPoint(
                            kController.KsResult.KSensor, TrackedSkeleton, JointType.ShoulderRight
                            );

                        ColorImagePoint footpoint = KinectController.GetColorImagePointFromSkeletonPoint(
                            kController.KsResult.KSensor, TrackedSkeleton, JointType.FootLeft
                            );

                        ColorImagePoint headpoint = KinectController.GetColorImagePointFromSkeletonPoint(
                            kController.KsResult.KSensor, TrackedSkeleton, JointType.Head
                            );

                        ColorImagePoint rightHandPoint = KinectController.GetColorImagePointFromSkeletonPoint(
                            kController.KsResult.KSensor, TrackedSkeleton, JointType.HandRight
                            );

                        if (rightHandPoint.Y < headpoint.Y)
                        {
                            img = Image.FromFile("forecast.jpg");
                            img = this.SetImageOpacity(img, 0.3f);
                        }

                        Graphics graph = this.pbStream.CreateGraphics();
                        Pen      pen   = new Pen(Color.Red, 3);
                        Brush    b     = new SolidBrush(Color.Red);
                        graph.DrawRectangle(pen, leftshoulderpoint.X - 20, headpoint.Y + 20,
                                            Math.Abs(rightshoulderpoint.X - leftshoulderpoint.X),
                                            Math.Abs(headpoint.Y - footpoint.Y));

                        int posx = leftshoulderpoint.X - 200;

                        if (leftshoulderpoint.X - 200 <= pbStream.Left)
                        {
                            posx = rightshoulderpoint.X;
                        }
                        if (rightshoulderpoint.X + 200 >= pbStream.Right)
                        {
                            posx = leftshoulderpoint.X - 200;
                        }

                        graph.DrawImage(img, posx, headpoint.Y, 200, 200);
                        //graph.FillRectangle(b, new Rectangle(posx, headpoint.Y, 100, 100));
                        LogFile(rightshoulderpoint, headpoint);
                    }
                }
            }
        }