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); } } } }