void OnApplicationQuit() { if (_sensor != null) { _sensor.Dispose(); _sensor = null; } }
public MainWindow() { var sensor = V2Sensor.GetDefault(); _sensor = sensor; #if true { // setup depth stream var depthStream = new V2DepthStream(sensor.Sensor); // create the bitmap to display _depthSource = new WriteableBitmap( depthStream.Resolution.Width(), depthStream.Resolution.Height(), 96.0, 96.0, PixelFormats.Gray16, null); var depthWaitHandle = new ManualResetEvent(false); depthWaitHandle.SafeWaitHandle = new Microsoft.Win32.SafeHandles.SafeWaitHandle( depthStream.CreateWaitHandle(), false); StartUpdating(depthWaitHandle, depthStream); } #endif #if false { // setup image stream var imageStream = new V2ImageStream(sensor.Sensor); // create the bitmap to display DepthSource = new WriteableBitmap( imageStream.Width, imageStream.Height, 96.0, 96.0, PixelFormats.Bgr32, null); var waitHandle = new ManualResetEvent(false); waitHandle.SafeWaitHandle = new Microsoft.Win32.SafeHandles.SafeWaitHandle( imageStream.CreateWaitHandle(), false); StartUpdating(waitHandle, imageStream); } #endif InitializeComponent(); }
// Update is called once per frame void Update () { if (_sensor == null) { var sensor = new V2Sensor(); _depthStream = new V2DepthStream(sensor.Sensor); _sensor = sensor; } using (var frame = _depthStream.GetFrame()) { if (frame == null) { return; } if (DepthTexture == null) { DepthTexture = new Texture2D( _depthStream.Width, _depthStream.Height, TextureFormat.ARGB32, false); DepthTexture.filterMode = FilterMode.Point; _depth = new Int16[_depthStream.Width * _depthStream.Height]; } Marshal.Copy(frame.Buffer, _depth, 0, _depth.Length); var pixel32s = _depth.Select((Int16 d) => { var b = (Byte)(UInt16)d; return new Color32( b, b, b, 255 ); }).ToArray(); //Debug.Log(pixel32s.Length); DepthTexture.SetPixels32(pixel32s); DepthTexture.Apply(); } }