public ReconstructionController(KinectSensor sensor) { Contract.Requires(sensor != null); this.syncContext = SynchronizationContext.Current; this.sensor = sensor; var rparams = new ReconstructionParameters(128, 256, 256, 256); reconstruction = Reconstruction.FusionCreateReconstruction(rparams, ReconstructionProcessor.Amp, -1, worldToCameraTransform); worldToVolumeTransform = reconstruction.GetCurrentWorldToVolumeTransform(); worldToVolumeTransform.M43 -= MIN_DEPTH * rparams.VoxelsPerMeter; reconstruction.ResetReconstruction(worldToCameraTransform, worldToVolumeTransform); var depthFrameDesc = sensor.DepthFrameSource.FrameDescription; var totalPixels = depthFrameDesc.Width * depthFrameDesc.Height; rawDepthData = new ushort[totalPixels]; bodyIndexData = new byte[totalPixels]; SurfaceBitmap = new ThreadSafeBitmap(depthFrameDesc.Width, depthFrameDesc.Height); var intrinsics = sensor.CoordinateMapper.GetDepthCameraIntrinsics(); var cparams = new CameraParameters( intrinsics.FocalLengthX / depthFrameDesc.Width, intrinsics.FocalLengthY / depthFrameDesc.Height, intrinsics.PrincipalPointX / depthFrameDesc.Width, intrinsics.PrincipalPointY / depthFrameDesc.Height); floatDepthFrame = new FusionFloatImageFrame(depthFrameDesc.Width, depthFrameDesc.Height, cparams); pointCloudFrame = new FusionPointCloudImageFrame(depthFrameDesc.Width, depthFrameDesc.Height, cparams); surfaceFrame = new FusionColorImageFrame(depthFrameDesc.Width, depthFrameDesc.Height, cparams); }
public KinectFrameRenderer(KinectSensor sensor, DepthToColorConverter converter) { Contract.Requires(sensor != null); Contract.Requires(converter != null); this.syncContext = SynchronizationContext.Current; this.converter = converter; var depthFrameDesc = sensor.DepthFrameSource.FrameDescription; var pixelCount = depthFrameDesc.Width * depthFrameDesc.Height; frameData = new ushort[pixelCount]; Bitmap = new ThreadSafeBitmap(depthFrameDesc.Width, depthFrameDesc.Height); reader = sensor.DepthFrameSource.OpenReader(); reader.FrameArrived += Reader_FrameArrived; }
private void UpdateBitmap(ThreadSafeBitmap bitmap, WriteableBitmapHolder holder, Image image) { if (holder == null || bitmap == null) { return; } var changed = false; bitmap.Access(bitmapData => changed = holder.WritePixels(bitmap.Width, bitmap.Height, bitmapData)); if (changed) { image.Source = holder.Bitmap; } }
/// <summary> /// Updates the source of given image. /// </summary> /// <param name="bitmap">Bitmap</param> /// <param name="holder">Bitmap holder</param> /// <param name="image">Image from statickinect window.</param> private void UpdateBitmap(ThreadSafeBitmap bitmap, WriteableBitmapHolder holder, Image image) { if (holder == null || bitmap == null) { return; } var changed = false; // Can not be interrupted by other threads. WritePixels returns true if the bitmap is changed. bitmap.Access(bitmapData => changed = holder.WritePixels(bitmap.Width, bitmap.Height, bitmapData)); // If bitmap is changed updates the source of the image. if (changed) { image.Source = holder.Bitmap; } }