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); }
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); }
/// <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); } } } } } } */ }
protected void TriggerImageChanged(CubeImage image) { ImageChanged?.Invoke(image); }