コード例 #1
0
        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;
        }
コード例 #2
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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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));
                }
            }
        }
コード例 #5
0
        /// <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));
                }
            }
        }