示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileName"></param>
        private static void SampleFileStorageReadSeq(string fileName)
        {
            // cvGetHashedKey, cvGetFileNode

            using (CvFileStorage fs = new CvFileStorage("sequence.yml", null, FileStorageMode.Read))
            {
                CvStringHashNode xKey   = fs.GetHashedKey("x", true);
                CvStringHashNode yKey   = fs.GetHashedKey("y", true);
                CvFileNode       points = fs.GetFileNodeByName(null, "points");

                if ((points.Tag & NodeType.Seq) != 0)
                {
                    CvSeq       seq    = points.DataSeq;
                    int         total  = seq.Total;
                    CvSeqReader reader = new CvSeqReader();
                    seq.StartRead(reader, false);
                    for (int i = 0; i < total; i++)
                    {
                        CvFileNode pt = CvFileNode.FromPtr(reader.Ptr);
                        int        x  = fs.ReadIntByName(pt, "x", 0);
                        int        y  = fs.ReadIntByName(pt, "y", 0);

                        Cv.NEXT_SEQ_ELEM(seq.ElemSize, reader);
                        Console.WriteLine("{0}: ({1}, {2})", i, x, y);
                    }
                }
            }
            Console.ReadKey();
        }
示例#2
0
        /// <summary>
        /// マップのシーケンスのファイルストレージからの読み込み
        /// </summary>
        /// <param name="fileName">書きこむXML or YAMLファイル</param>
        private static void SampleFileStorageReadSeq(string fileName)
        {
            // cvGetHashedKey, cvGetFileNode
            // 二つのエントリを持つマップのシーケンスをファイルから読み込む

            // (1)ファイルストレージのオープン,ハッシュドキーの計算,シーケンスノードの取得
            using (CvFileStorage fs = new CvFileStorage("sequence.yml", null, FileStorageMode.Read))
            {
                CvStringHashNode xKey   = fs.GetHashedKey("x", true);
                CvStringHashNode yKey   = fs.GetHashedKey("y", true);
                CvFileNode       points = fs.GetFileNodeByName(null, "points");
                // (2)シーケンスリーダを初期化,各ノードを順次取得
                if ((points.Tag & NodeType.Seq) != 0)
                {
                    CvSeq       seq    = points.DataSeq;
                    int         total  = seq.Total;
                    CvSeqReader reader = new CvSeqReader();
                    seq.StartRead(reader, false);
                    for (int i = 0; i < total; i++)
                    {
                        CvFileNode pt = CvFileNode.FromPtr(reader.Ptr);
                        // (3)高速バージョン

                        /*
                         * CvFileNode xnode = fs.GetFileNode(pt, x_key, false);
                         * CvFileNode ynode = fs.GetFileNode(pt, y_key, false);
                         * Debug.Assert(
                         *  xnode != null &&
                         *  (xnode.Tag & NodeType.Integer) != 0 &&
                         *  ynode != null &&
                         *  (ynode.Tag & NodeType.Integer) != 0
                         * );
                         * int x = xnode.DataI;
                         * int i = ynode.DataI;
                         * //*/
                        // (4)低速バージョン.x_keyとy_keyを使わない

                        /*
                         * CvFileNode xnode = fs.GetFileNodeByName(pt, "x");
                         * CvFileNode ynode = fs.GetFileNodeByName(pt, "i");
                         * Debug.Assert(
                         *  xnode != null &&
                         *  (xnode.Tag & NodeType.Integer) != 0 &&
                         *  ynode != null &&
                         *  (ynode.Tag & NodeType.Integer) != 0
                         * );
                         * int x = xnode.DataI;
                         * int i = ynode.DataI;
                         * //*/
                        // (5)さらに低速だが,使いやすいバージョン
                        ///*
                        int x = fs.ReadIntByName(pt, "x", 0);
                        int y = fs.ReadIntByName(pt, "y", 0);
                        //*/
                        // (6)データを表示し,次のシーケンスノードを取得
                        Cv.NEXT_SEQ_ELEM(seq.ElemSize, reader);
                        Console.WriteLine("{0}: ({1}, {2})", i, x, y);
                    }
                }
            }
            Console.ReadKey();
        }