コード例 #1
0
        private void OnAnimTimerTick(object sender, EventArgs e)
        {
            /*if (_animTicks++ % 2 == 0)
            {
                SendImage(DemoImageType.TestImage, null);
            }
            else
            {
                SendImage(DemoImageType.Skeleton, null);
            }*/

            int x = _animTicks % 8;
            int y = (int)(_animTicks / 8) % 8;
            int z = (int)(_animTicks / (8 * 8));

            _animTicks++;

            _image.Add(new byte[] { (byte)x, (byte)y, (byte)z });

            byte[,] bytes = new byte[_image.Count, 3];

            for (int i = 0; i < _image.Count; i++)
            {
                bytes[i, 0] = _image[i][0];
                bytes[i, 1] = _image[i][1];
                bytes[i, 2] = _image[i][2];
            }

            CubeImage image = new CubeImage(bytes);

            TriggerImageChanged(image);
        }
コード例 #2
0
        private void OnGameTimer(object sender, EventArgs e)
        {
            _pos[0] = (byte)((int)((int)_pos[0] + _dir[0]) % _dimension);
            _pos[1] = (byte)((int)((int)_pos[1] + _dir[1]) % _dimension);
            _pos[2] = (byte)((int)((int)_pos[2] + _dir[2]) % _dimension);

            _snake.Add(new byte[] { _pos[0], _pos[1], _pos[2]});

            // Convert snake vectors to CubeImage vectors
            byte[,] bytes = new byte[_snake.Count, 3];

            for (int i = 0; i < _snake.Count; i++)
            {
                bytes[i, 0] = _snake[i][0];
                bytes[i, 1] = _snake[i][1];
                bytes[i, 2] = _snake[i][2];
            }

            CubeImage image = new CubeImage(bytes);

            TriggerImageChanged(image);
        }
コード例 #3
0
        /// <summary>
        /// Event handler for Kinect sensor's SkeletonFrameReady event
        /// </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];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
            }

            if (skeletons.Length == 0) return;

            List<byte[]> imageBytes = new List<byte[]>();

            foreach (Skeleton skeleton in skeletons)
            {
                // Render only tracked skeletons,
                // nicht SkeletonTrackingState.PositionOnly
                if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
                {
                    // Render Joints
                    foreach (Joint joint in skeleton.Joints)
                    {
                        // Render only tracked joints (not SkeletonTrackingState.PositionOnly)
                        if (joint.TrackingState == JointTrackingState.Tracked)
                        {
                            switch (joint.JointType)
                            {
                                case JointType.Head:
                                case JointType.HandLeft:
                                case JointType.HandRight:
                                case JointType.FootLeft:
                                case JointType.FootRight:

                                    Point p = SkeletonPointToScreen(joint.Position);

                                    byte x = (byte)Math.Round((p.X / 320) * 7);
                                    byte y = (byte)(7 - Math.Round((p.Y / 240) * 7));

                                    imageBytes.Add(new byte[] { x, y, 0 });

                                    break;

                                default:
                                    break;
                            }

                        }
                    }
                }

            }

            byte[,] bytes = new byte[imageBytes.Count, 3];

            for (int i = 0; i < bytes.GetLength(0); i++)
            {
                bytes[i, 0] = imageBytes[i][0];
                bytes[i, 1] = imageBytes[i][1];
                bytes[i, 2] = imageBytes[i][2];
            }

            CubeImage image = new CubeImage(bytes);

            TriggerImageChanged(image);

            /*
            using (DrawingContext dc = _drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, imageSkeleton.Width, imageSkeleton.Height));

                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skeleton in skeletons)
                    {
                        // Render only tracked skeletons
                        // inferred: SkeletonTrackingState.PositionOnly
                        if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            // Render Joints
                            foreach (Joint joint in skeleton.Joints)
                            {
                                // Render only tracked joints (not SkeletonTrackingState.PositionOnly)
                                if (joint.TrackingState == JointTrackingState.Tracked)
                                {
                                    dc.DrawEllipse(Brushes.White, null, SkeletonPointToScreen(joint.Position), 3, 3);
                                }
                            }
                        }

                    }
                }
            }
            */
        }
コード例 #4
0
 protected void TriggerImageChanged(CubeImage image)
 {
     ImageChanged?.Invoke(image);
 }