コード例 #1
0
ファイル: Macro.cs プロジェクト: tuanthng/opencvsharp
        /// <summary>
        /// シーケンスの要素を一つ読みだして、読み出しポインタを次へ1つ移動させる
        /// </summary>
        /// <param name="elem"></param>
        /// <param name="reader"></param>
#else
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="elem"></param>
        /// <param name="reader"></param>
#endif
        public static void REV_READ_SEQ_ELEM <T>(out T elem, CvSeqReader reader) where T : struct
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            //Type t = typeof(t);
            //if (t.IsValueType)
            {
                using (StructurePointer <T> elemPtr = new StructurePointer <T>())
                {
                    if (reader.Seq.ElemSize != elemPtr.Size)
                    {
                        throw new OpenCvSharpException();
                    }

                    Util.CopyMemory(elemPtr.Ptr, reader.Ptr, elemPtr.Size);
                    PREV_SEQ_ELEM(elemPtr.Size, reader);

                    elem = elemPtr.ToStructure();
                }
            }

            /*
             * else
             * {
             *  IntPtr elemPtr;
             *  REV_READ_SEQ_ELEM<IntPtr>(out elemPtr, reader);
             *  elem = Util.ToObject<t>(elemPtr);
             * }
             * //*/
        }
コード例 #2
0
ファイル: Macro.cs プロジェクト: tuanthng/opencvsharp
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="elem"></param>
        /// <param name="writer"></param>
#else
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="elem"></param>
        /// <param name="writer"></param>
#endif
        public static void WRITE_SEQ_ELEM <T>(T elem, CvSeqWriter writer) where T : struct
        {
            int size = Marshal.SizeOf(typeof(T));

            if (writer.Seq.ElemSize != size)
            {
                throw new OpenCvSharpException();
            }

            if (writer.Ptr.ToInt64() >= writer.BlockMax.ToInt64())
            {
                NativeMethods.cvCreateSeqBlock(writer.CvPtr);
            }

            if (writer.Ptr.ToInt64() > writer.BlockMax.ToInt64() - size)
            {
                throw new OpenCvSharpException();
            }

            using (var elemPtr = new StructurePointer <T>(elem))
            {
                Util.CopyMemory(writer.Ptr, elemPtr, size);
            }
            writer.Ptr = new IntPtr(writer.Ptr.ToInt64() + size);
        }
コード例 #3
0
        /// <summary>
        /// 指定したインデックスの配列の要素を設定する
        /// </summary>
        /// <param name="index">配列のインデックス</param>
        /// <param name="value">割り当てる値</param>
#else
        /// <summary>
        /// Change the particular array element
        /// </summary>
        /// <param name="index">zero-based component of the element index </param>
        /// <param name="value">The assigned value </param>
#endif
        public void Set(int index, T value)
        {
            using (StructurePointer <T> src = new StructurePointer <T>(value))
            {
                IntPtr dst = new IntPtr(_ptr.ToInt64() + (_size * index));
                Util.CopyMemory(dst, src, _size);
            }
        }