// private ctor for singleton private OpenNIContext() { this.context = new Context(); if (null == context) { return; } if (oniFile != "") { context.OpenFileRecording(oniFile); } // NITE license from OpenNI.org License ll = new License(); ll.Key = "0KOIk2JeIBYClPWVnMoRKn5cdY4="; ll.Vendor = "PrimeSense"; context.AddLicense(ll); this.Depth = openNode(NodeType.Depth) as DepthGenerator; this.mirror = this.Depth.MirrorCapability; if (oniFile == "") { this.Mirror = true; } }
// 初期化 private void xnInitialize() { // コンテキストの初期化 context = new Context(); // OpenFileRecordingExを使うように促されるが、使用するとアクセスバイオレーションになる context.OpenFileRecording(RECORD_PATH); // プレーヤーの作成 player = context.FindExistingNode(NodeType.Player) as OpenNI.Player; if (player == null) { throw new Exception(context.GlobalErrorState); } // 終端に達したら通知するコールバックを登録する player.EndOfFileReached += new EventHandler(player_EndOfFileReached); // イメージジェネレータの作成 image = context.FindExistingNode(NodeType.Image) as ImageGenerator; if (image == null) { throw new Exception(context.GlobalErrorState); } // デプスジェネレータの作成 depth = context.FindExistingNode(NodeType.Depth) as DepthGenerator; if (depth == null) { throw new Exception(context.GlobalErrorState); } // ヒストグラムバッファの作成 histogram = new int[depth.DeviceMaxDepth]; }
/// <summary> /// Creates a new control instance with a recording as data /// source. The current image data can be obtained by the /// <see cref="Image"/>-property. The /// <see cref="NewImageDataAvailable"/> event informs about when the /// data is updated, the <see cref="ErrorOccured"/>-event about /// errors. /// </summary> /// <exception cref="System.Exception">Thrown if the stream could not /// be initialized properly.</exception> public OpenNIRecordingController(String recording_filename, String movementDataFileName, String userAnnotationFilename) { // Create a new context and the data-generating nodes. context = new Context(); context.OpenFileRecording(recording_filename); this.recording_filename = recording_filename; _userInformationReader = new BinaryReader( new FileStream(movementDataFileName, FileMode.Open)); using (FileStream annotation_stream = File.OpenRead(userAnnotationFilename)) { _userLocationInformation = (ImageDictionary)movementDataSerializer.Deserialize(annotation_stream); } // Image imageGenerator = (ImageGenerator)context.FindExistingNode(NodeType.Image); // Depth depthGenerator = (DepthGenerator)context.FindExistingNode(NodeType.Depth); histogram = new int[depthGenerator.DeviceMaxDepth]; // Player player = (Player)context.FindExistingNode(NodeType.Player); player.PlaybackSpeed = 1.0; if (depthGenerator == null || imageGenerator == null || player == null) { throw new Exception("Could not initialize recording stream."); } // Error handling context.ErrorStateChanged += context_ErrorStateChanged; context.StartGeneratingAll(); }