private void load_skeleton(MySkeletonFrame frame) { System.IO.MemoryStream ms = frame.toImageMemoryStream(); ms.Position = 0; ImageSourceConverter c = new ImageSourceConverter(); BitmapImage bi = new BitmapImage(); bi.BeginInit(); bi.StreamSource = ms; bi.EndInit(); currentFrame.Source = bi; }
public MyOverlayFrame(MySkeletonFrame skeletonframe, MyColorFrame colorframe) { this.timetag = colorframe.getTime(); System.Drawing.Bitmap colorimg = (System.Drawing.Bitmap)System.Drawing.Image.FromStream(colorframe.getImageMemoryStream()); System.Drawing.Image painted = SkeletonPainter.paintSkeletonAndHideHead(colorimg, skeletonframe.getSkeletons()); overlayMemoryStream = new MemoryStream(); painted.Save(overlayMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg); System.Drawing.Bitmap colorimg2 = (System.Drawing.Bitmap)System.Drawing.Image.FromStream(colorframe.getImageMemoryStream()); System.Drawing.Image painted2 = SkeletonPainter.hideHead(colorimg2, skeletonframe.getSkeletons()); headhidedMemoryStream = new MemoryStream(); painted2.Save(headhidedMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg); }
public List <MySkeletonFrame> interpolate(MySkeletonFrame next) { List <MySkeletonFrame> results = new List <MySkeletonFrame>(); long gap = next.getTime() - getTime(); long numOfSpans = gap / (long)33; if (numOfSpans == 0) { return(results); } long interval = gap / numOfSpans; for (int i = 1; i < numOfSpans; i++) { MySkeleton interSkeleton = new MySkeleton(this.skeleton, next.skeleton, next.getTime() - this.getTime(), (long)i * interval); MySkeletonFrame interpolation = new MySkeletonFrame(interSkeleton, this.timeTag + (long)i * interval); results.Add(interpolation); } return(results); }
private void completeSkeletons() { if (recorded_skeleton_frames.Count == 0) { for (int i = 0; i < recorded_color_frames.Count; i++) { MySkeletonFrame injection = new MySkeletonFrame(recorded_color_frames[i].getTime()); recorded_skeleton_frames.Add(injection); } return; } // inject empty skeleton frames at the begining for (long firstGap = recorded_skeleton_frames[0].getTime() - recorded_color_frames[0].getTime(); firstGap > 40; firstGap = recorded_skeleton_frames[0].getTime() - recorded_color_frames[0].getTime()) { MySkeletonFrame injection = new MySkeletonFrame(recorded_skeleton_frames[0].getTime() - 33); recorded_skeleton_frames.Insert(0, injection); } // inject empty skeleton frames at the end for (long lastGap = recorded_color_frames.Last().getTime() - recorded_skeleton_frames.Last().getTime(); lastGap > 40; lastGap = recorded_color_frames.Last().getTime() - recorded_skeleton_frames.Last().getTime()) { MySkeletonFrame injection = new MySkeletonFrame(recorded_skeleton_frames.Last().getTime() + 33); recorded_skeleton_frames.Insert(recorded_skeleton_frames.Count, injection); } // making overlay and interpolating skeleton when neccessary for (int i = 0; i < recorded_color_frames.Count; i++) { MyColorFrame thisColorFrame = recorded_color_frames.ElementAt(i); if (i + 1 < recorded_skeleton_frames.Count) { MySkeletonFrame thisSkeletonFrame = recorded_skeleton_frames[i]; MySkeletonFrame nextSkeletonFrame = recorded_skeleton_frames[i + 1]; recorded_skeleton_frames.InsertRange(i + 1, thisSkeletonFrame.interpolate(nextSkeletonFrame)); } } }
/// <summary> /// runs when new skeleton frame is received /// </summary> /// <param name="sender">object sending the event</param> /// <param name="e">event arguments</param> private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { Skeleton[] skeletons = new Skeleton[0]; long now = -1; using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) { if (skeletonFrame != null) { skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons); now = skeletonFrame.Timestamp; } } if (is_recording) { Skeleton trackedSkeleton = null; for (int i = 0; i < skeletons.Length; i++) { if (skeletons.ElementAt(i).TrackingState == SkeletonTrackingState.Tracked) { trackedSkeleton = skeletons[i]; break; } } if (trackedSkeleton != null) { MySkeletonFrame skelFrame = new MySkeletonFrame(trackedSkeleton, now); recorded_skeleton_frames.Add(skelFrame); clabel3.Content = recorded_skeleton_frames.Count; } } if (is_observing_live) { using (DrawingContext dc = this.drawingGroup.Open(), overlaydc = this.overlaydrawingGroup.Open()) { // Draw a transparent background to set the render size overlaydc.DrawRectangle(Brushes.Transparent, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight)); dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight)); if (skeletons.Length != 0) { List <Skeleton> skeletonsinframe = new List <Skeleton>(); foreach (Skeleton skel in skeletons) { RenderClippedEdges(skel, dc); if (skel.TrackingState == SkeletonTrackingState.Tracked) { this.DrawBonesAndJoints(skel, dc); this.DrawBonesAndJoints(skel, overlaydc); } else if (skel.TrackingState == SkeletonTrackingState.PositionOnly) { dc.DrawEllipse( this.centerPointBrush, null, this.SkeletonPointToScreen(skel.Position), BodyCenterThickness, BodyCenterThickness); overlaydc.DrawEllipse( this.centerPointBrush, null, this.SkeletonPointToScreen(skel.Position), BodyCenterThickness, BodyCenterThickness); } } } // prevent drawing outside of our render area this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight)); this.overlaydrawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight)); } } }