private void Track(AsyncStateData asyncData) { asyncData.Running = true; if (InitOpenNi(asyncData)) { while (!asyncData.Canceled) { _niContext.WaitAndUpdateAll(); _imageNode.GetMetaData(_imageMeta); _depthNode.GetMetaData(_depthMeta); _sceneNode.GetMetaData(_sceneMeta); asyncData.AsyncOperation.SynchronizationContext.Send( delegate { //UpdateCameraInfo(); UpdateFrameData(); InvokeTrackingUpdated(EventArgs.Empty); }, null); } } asyncData.Running = false; asyncData.AsyncOperation.PostOperationCompleted(evt => InvokeTrackinkgCompleted(EventArgs.Empty), null); }
private void InitOpenNi(AsyncStateData asyncData) { _niContext = new XnMOpenNIContextEx(); _niContext.InitFromXmlFile("openni.xml"); _imageNode = (XnMImageGenerator)_niContext.FindExistingNode(XnMProductionNodeType.Image); _imageMeta = new XnMImageMetaData(); _imageNode.GetMetaData(_imageMeta); // create the image bitmap source on asyncData.AsyncOperation.SynchronizationContext.Send( md => CreateImageBitmap(_imageMeta, out _rgbImageSource), null); // add depth node _depthNode = (XnMDepthGenerator)_niContext.FindExistingNode(XnMProductionNodeType.Depth); _depthMeta = new XnMDepthMetaData(); _depthNode.GetMetaData(_depthMeta); asyncData.AsyncOperation.SynchronizationContext.Send( state => CreateImageBitmap(_depthMeta, out _depthImageSource, PixelFormats.Pbgra32), null); // add scene node _sceneNode = (XnMSceneAnalyzer)_niContext.FindExistingNode(XnMProductionNodeType.Scene); _sceneMeta = new XnMSceneMetaData(); _sceneNode.GetMetaData(_sceneMeta); asyncData.AsyncOperation.SynchronizationContext.Send( state => CreateImageBitmap(_sceneMeta, out _sceneImageSource, PixelFormats.Pbgra32), null); }
private bool InitOpenNi(AsyncStateData asyncData) { try { _niContext = new XnMOpenNIContextEx(); _niContext.InitFromXmlFile("openni.xml"); _imageNode = (XnMImageGenerator)_niContext.FindExistingNode(XnMProductionNodeType.Image); _imageMeta = new XnMImageMetaData(); _imageNode.GetMetaData(_imageMeta); if (_imageMeta.PixelFormat != XnMPixelFormat.Rgb24) { throw new InvalidOperationException("Only RGB24 pixel format is supported"); } // add depth node _depthNode = (XnMDepthGenerator)_niContext.FindExistingNode(XnMProductionNodeType.Depth); _depthMeta = new XnMDepthMetaData(); _depthNode.GetMetaData(_depthMeta); if (_depthMeta.PixelFormat != XnMPixelFormat.Grayscale16Bit) { throw new InvalidOperationException("Only 16-bit depth precission is supported"); } if (_depthMeta.XRes != _imageMeta.XRes || _depthMeta.YRes != _imageMeta.YRes) { throw new InvalidOperationException("Image and depth map must have the same resolution"); } // add scene node _sceneNode = (XnMSceneAnalyzer)_niContext.FindExistingNode(XnMProductionNodeType.Scene); _sceneMeta = new XnMSceneMetaData(); _sceneNode.GetMetaData(_sceneMeta); asyncData.AsyncOperation.SynchronizationContext.Send( delegate { UpdateCameraInfo(); UpdateFrameData(); InvokeTrackinkgStarted(EventArgs.Empty); }, null); return(true); } catch (Exception ex) { return(false); } }
private bool InitOpenNi(AsyncStateData asyncData) { try { _niContext = new XnMOpenNIContextEx(); _niContext.InitFromXmlFile("openni.xml"); _imageNode = (XnMImageGenerator)_niContext.FindExistingNode(XnMProductionNodeType.Image); _imageMeta = new XnMImageMetaData(); _imageNode.GetMetaData(_imageMeta); if (_imageMeta.PixelFormat != XnMPixelFormat.Rgb24) throw new InvalidOperationException("Only RGB24 pixel format is supported"); // add depth node _depthNode = (XnMDepthGenerator)_niContext.FindExistingNode(XnMProductionNodeType.Depth); _depthMeta = new XnMDepthMetaData(); _depthNode.GetMetaData(_depthMeta); if (_depthMeta.PixelFormat != XnMPixelFormat.Grayscale16Bit) throw new InvalidOperationException("Only 16-bit depth precission is supported"); if (_depthMeta.XRes != _imageMeta.XRes || _depthMeta.YRes != _imageMeta.YRes) throw new InvalidOperationException("Image and depth map must have the same resolution"); // add scene node _sceneNode = (XnMSceneAnalyzer)_niContext.FindExistingNode(XnMProductionNodeType.Scene); _sceneMeta = new XnMSceneMetaData(); _sceneNode.GetMetaData(_sceneMeta); asyncData.AsyncOperation.SynchronizationContext.Send( delegate { UpdateCameraInfo(); UpdateFrameData(); InvokeTrackinkgStarted(EventArgs.Empty); }, null); return true; } catch (Exception ex) { return false; } }
private void InitOpenNi(AsyncStateData asyncData) { _niContext = new XnMOpenNIContextEx(); _niContext.InitFromXmlFile("openni.xml"); _imageNode = (XnMImageGenerator)_niContext.FindExistingNode(XnMProductionNodeType.Image); _imageMeta = new XnMImageMetaData(); _imageNode.GetMetaData(_imageMeta); // create the image bitmap source on asyncData.AsyncOperation.SynchronizationContext.Send( md => CreateImageBitmap(_imageMeta, out _rgbImageSource), null); // add depth node _depthNode = (XnMDepthGenerator) _niContext.FindExistingNode(XnMProductionNodeType.Depth); _depthMeta = new XnMDepthMetaData(); _depthNode.GetMetaData(_depthMeta); asyncData.AsyncOperation.SynchronizationContext.Send( state => CreateImageBitmap(_depthMeta, out _depthImageSource, PixelFormats.Pbgra32), null); // add scene node _sceneNode = (XnMSceneAnalyzer) _niContext.FindExistingNode(XnMProductionNodeType.Scene); _sceneMeta = new XnMSceneMetaData(); _sceneNode.GetMetaData(_sceneMeta); asyncData.AsyncOperation.SynchronizationContext.Send( state => CreateImageBitmap(_sceneMeta, out _sceneImageSource, PixelFormats.Pbgra32), null); }