Exemple #1
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
        /// <param name="userdata"></param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="value">Initial slider position</param>
        /// <param name="max">The upper limit of the range this trackbar is working with. </param>
        /// <param name="callback">Callback handler</param>
        /// <param name="userdata"></param>
#endif
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback2 callback, object?userdata)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (string.IsNullOrEmpty(window))
            {
                throw new ArgumentNullException(nameof(window));
            }

            this.name     = name;
            this.window   = window;
            this.value    = value;
            this.max      = max;
            this.callback = callback ?? throw new ArgumentNullException(nameof(callback));
            this.userdata = userdata;

            // userdataをIntPtrに変換
            IntPtr userdataPtr;

            if (userdata != null)
            {
                gchUserdata = GCHandle.Alloc(userdata);
                userdataPtr = GCHandle.ToIntPtr(gchUserdata);
            }
            else
            {
                userdataPtr = IntPtr.Zero;
            }

            this.callback = callback;
            // コールバックdelegateを、userdataをobjectとするように変換
            callbackNative = (pos, ud) =>
            {
                if (ud == IntPtr.Zero)
                {
                    callback(pos, null);
                }
                else
                {
                    var gch = GCHandle.FromIntPtr(ud);
                    callback(pos, gch.Target);
                }
            };

            // コールバックdelegateをポインタに変換
            gchCallback       = GCHandle.Alloc(callback);
            gchCallbackNative = GCHandle.Alloc(callbackNative);
            var callbackPtr = Marshal.GetFunctionPointerForDelegate(callbackNative);

            //gchValue = GCHandle.Alloc(value, GCHandleType.Pinned);

            result = NativeMethods.highgui_createTrackbar(name, window, ref this.value, max, callbackPtr, userdataPtr);

            if (result == 0)
            {
                throw new OpenCvSharpException("Failed to create CvTrackbar.");
            }
        }
Exemple #2
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="value">Initial slider position</param>
        /// <param name="max">The upper limit of the range this trackbar is working with. </param>
        /// <param name="callback">Callback handler</param>
#endif
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback callback)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (string.IsNullOrEmpty(window))
            {
                throw new ArgumentNullException(nameof(window));
            }

            this.name     = name;
            this.window   = window;
            this.value    = value;
            this.max      = max;
            this.callback = callback ?? throw new ArgumentNullException(nameof(callback));

            // userdata wrapper
            callbackNative = (pos, ud) => callback(pos);

            //gchValue = GCHandle.Alloc(value, GCHandleType.Pinned);
            gchCallback       = GCHandle.Alloc(callback);
            gchCallbackNative = GCHandle.Alloc(callbackNative);
            var callbackPtr = Marshal.GetFunctionPointerForDelegate(callbackNative);

            NativeMethods.HandleException(
                NativeMethods.highgui_createTrackbar(name, window, ref this.value, max, callbackPtr, IntPtr.Zero, out result));

            if (result == 0)
            {
                throw new OpenCvSharpException("Failed to create CvTrackbar.");
            }
        }
Exemple #3
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
        /// <param name="userdata"></param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="value">Initial slider position</param>
        /// <param name="max">The upper limit of the range this trackbar is working with. </param>
        /// <param name="callback">Callback handler</param>
        /// <param name="userdata"></param>
#endif
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback2 callback, object userdata)
        {
            if (string.IsNullOrEmpty(name))
                throw new ArgumentNullException(nameof(name));
            if (string.IsNullOrEmpty(window))
                throw new ArgumentNullException(nameof(window));
            if (callback == null)
                throw new ArgumentNullException(nameof(callback));

            this.name = name;
            this.window = window;
            this.value = value;
            this.max = max;
            this.callback = callback;
            this.userdata = userdata;

            // userdataをIntPtrに変換
            IntPtr userdataPtr;
            if (userdata != null)
            {
                gchUserdata = GCHandle.Alloc(userdata);
                userdataPtr = GCHandle.ToIntPtr(gchUserdata);
            }
            else
            {
                userdataPtr = IntPtr.Zero;
            }

            this.callback = callback;
            // コールバックdelegateを、userdataをobjectとするように変換                
            callbackNative = delegate(int pos, IntPtr ud)
            {
                if (ud == IntPtr.Zero)
                {
                    callback(pos, null);
                }
                else
                {
                    GCHandle gch = GCHandle.FromIntPtr(ud);
                    callback(pos, gch.Target);
                }
            };

            // コールバックdelegateをポインタに変換                
            gchCallback = GCHandle.Alloc(callback);
            gchCallbackNative = GCHandle.Alloc(callbackNative);
            IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(callbackNative);

            gchValue = GCHandle.Alloc(value, GCHandleType.Pinned);

            result = NativeMethods.highgui_createTrackbar(name, window, ref this.value, max, callbackPtr, userdataPtr);

            if (result == 0)
                throw new OpenCvSharpException("Failed to create CvTrackbar.");
        }
Exemple #4
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
        /// <param name="userdata"></param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="value">Initial slider position</param>
        /// <param name="max">The upper limit of the range this trackbar is working with. </param>
        /// <param name="callback">Callback handler</param>
        /// <param name="userdata"></param>
#endif
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback2 callback, object userdata)
        {
            if (string.IsNullOrEmpty(name))
                throw new ArgumentNullException("name");
            if (string.IsNullOrEmpty(window))
                throw new ArgumentNullException("window");
            if (callback == null)
                throw new ArgumentNullException("callback");

            _name = name;
            _window = window;
            _value = value;
            _max = max;
            _callback = callback;
            _userdata = userdata;

            // userdataをIntPtrに変換
            IntPtr userdataPtr;
            if (userdata != null)
            {
                _gchUserdata = GCHandle.Alloc(_userdata);
                userdataPtr = GCHandle.ToIntPtr(_gchUserdata);
            }
            else
            {
                userdataPtr = IntPtr.Zero;
            }

            _callback = callback;
            // コールバックdelegateを、userdataをobjectとするように変換                
            _callbackNative = delegate(int pos, IntPtr ud)
            {
                if (ud == IntPtr.Zero)
                {
                    callback(pos, null);
                }
                else
                {
                    GCHandle gch = GCHandle.FromIntPtr(ud);
                    callback(pos, gch.Target);
                }
            };

            // コールバックdelegateをポインタに変換                
            _gchCallback = GCHandle.Alloc(callback);
            _gchCallbackNative = GCHandle.Alloc(_callbackNative);
            IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(_callbackNative);

            _gchValue = GCHandle.Alloc(value, GCHandleType.Pinned);
#if DEBUG
            int result = CvInvoke.cvCreateTrackbar2(name, window, ref value, max, _callbackNative, userdataPtr);
#else
            _result = CvInvoke.cvCreateTrackbar2(name, window, ref value, max, callbackPtr, userdataPtr);
#endif
            if (_result == 0)
                throw new OpenCvSharpException("Failed to create CvTrackbar.");
        }