private void realCore_DepthFrameReceived(object sender, DepthFrameEventArgs e) { if (DepthFrameReceived != null) { DepthFrameReceived(this, e); } }
void MainWindow_DepthFrameReceived(object sender, DepthFrameEventArgs e) { //NOTE: Even though the depth is a 16-bit grayscale format natively, the event packs it as a bgr32. The shaders will correct this issue. //This trick is necessary because the image is rasterized to an 8-bit per channel format by WPF before it is passed to the shader //Thus, if we used a Gray16 and then shaded it, we would lose a bunch of image depth and the scaled images would look terrible. if (depthSource == null) { depthSource = new WriteableBitmap(e.width, e.height, 96.0, 96.0, PixelFormats.Bgr32, null); DepthImage.Source = depthSource; } else if (depthSource.PixelWidth != e.width || depthSource.PixelHeight != e.height) { depthSource = null; depthSource = new WriteableBitmap(e.width, e.height, 96.0, 96.0, PixelFormats.Bgr32, null); DepthImage.Source = depthSource; } depthSource.WritePixels(new Int32Rect(0, 0, e.width, e.height), e.image, e.width * (e.bytesPerPixel + e.perPixelExtra), 0); //Update the depth shader, if necessary (checks for necessity are done in the methods) CheckAndChangeDepthShader(e.kinectID); UpdateShaderMinMax(e.reliableMin, e.reliableMax); //Calculate the depth frame rate and display it double tempFPS = CalculateFrameRate(e.timeStamp, ref lastDepthTime, ref depthTimeIntervals); DepthFPSTextBlock.Text = tempFPS.ToString("F1"); }