/// <summary> /// runs when new color frame is received /// </summary> /// <param name="sender">object sending the event</param> /// <param name="e">event arguments</param> private void SensorColorFrameReady(object sender, ColorImageFrameReadyEventArgs e) { if (is_observing_live) { using (ColorImageFrame colorFrame = e.OpenColorImageFrame()) { if (colorFrame != null) { if (is_recording) { long now = colorFrame.Timestamp; MyColorFrame myColorFrame = new MyColorFrame(now, colorFrame.ToBitmap()); recorded_color_frames.Add(myColorFrame); clabel2.Content = recorded_color_frames.Count; } // Copy the pixel data from the image to a temporary array colorFrame.CopyPixelDataTo(this.colorPixels); // Write the pixel data into our bitmap this.colorBitmap.WritePixels( new Int32Rect(0, 0, this.colorBitmap.PixelWidth, this.colorBitmap.PixelHeight), this.colorPixels, this.colorBitmap.PixelWidth * sizeof(int), 0); } } } }
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); }
private void load_rgb(MyColorFrame frame) { timeTagLabel.Content = frame.getTime().ToString(); System.IO.MemoryStream ms = frame.getImageMemoryStream(); ms.Position = 0; ImageSourceConverter c = new ImageSourceConverter(); BitmapImage bi = new BitmapImage(); bi.BeginInit(); bi.StreamSource = ms; bi.EndInit(); currentFrame.Source = bi; }
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)); } } }