private void SkeletonExtractSkeletonFrameReady(object sender, BodyFrameArrivedEventArgs e) { bool dataReceived = false; Body[] skeleton_array = null; using (BodyFrame bodyFrame = e.FrameReference.AcquireFrame()) { if (bodyFrame != null) { if (skeleton_array == null) { // creates an array of 6 bodies, which is the max number of bodies that Kinect can track simultaneously skeleton_array = new Body[bodyFrame.BodyCount]; } bodyFrame.GetAndRefreshBodyData(skeleton_array); dataReceived = true; } } if (dataReceived) { foreach (Body data in skeleton_array) { if (data != null) { Skeleton2DDataExtract.ProcessData(data); } } } }
//Dtw events private void SkeletonExtractSkeletonFrameReady(object sender, SkeletonFrame skeletonFrame) { if (skeletonFrame != null) { skeletonFrame.CopySkeletonDataTo(MainWindow._FrameSkeletons); Skeleton data = (from s in MainWindow._FrameSkeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault(); Skeleton2DDataExtract.ProcessData(data); } }
/// <summary> /// Called each time a skeleton frame is ready. Passes skeletal data to the DTW processor /// </summary> /// <param name="sender">The sender object</param> /// <param name="e">Skeleton Frame Ready Event Args</param> private static void SkeletonExtractSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { using (var skeletonFrame = e.OpenSkeletonFrame()) { if (skeletonFrame == null) { return; // sometimes frame image comes null, so skip it. } var skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons); foreach (Skeleton data in skeletons) { Skeleton2DDataExtract.ProcessData(data); } } }