Ejemplo n.º 1
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">ボタンの名前. (これが null の場合,”button &lt;number of boutton&gt;” という名前になります)</param>
        /// <param name="callback">ボタン状態が変更される度に呼び出されるデりゲート</param>
        /// <param name="userdata">コールバック関数に渡されるオブジェクト</param>
        /// <param name="button_type">ボタンの種類</param>
        /// <param name="initial_button_state">ボタンのデフォルトの状態.チェックボックスとラジオボックスの場合,これは 0 または 1 になります.</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Name of the button ( if null, the name will be “button &lt;number of boutton&gt;”)</param>
        /// <param name="callback">Pointer to the function to be called every time the button changed its state.</param>
        /// <param name="userdata">object passed to the callback function. </param>
        /// <param name="button_type">button type</param>
        /// <param name="initial_button_state">Default state of the button. Use for checkbox and radiobox, its value could be 0 or 1. </param>
#endif
        public CvButton(string name, CvButtonCallback callback, object userdata, ButtonType button_type, int initial_button_state)
        {
            this.name     = name;
            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;
            IntPtr callbackPtr;

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

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

            result = NativeMethods.cvCreateButton(name, callbackPtr, userdataPtr, button_type, initial_button_state);
            if (result == 0)
            {
                throw new OpenCvSharpException("Failed to create CvButton.");
            }

            instances.Add(this);
        }
Ejemplo n.º 2
0
        public QtTest()
        {
            using (CvWindow window = new CvWindow("window", WindowMode.ExpandedGui))
                using (IplImage img = new IplImage(Const.ImageLenna, LoadMode.Color))
                {
                    if (CvWindow.HasQt)
                    {
                        // cvAddText
                        CvFont font = new CvFontQt("MS UI Gothic", 48, CvColor.Red, FontWeight.Bold, FontStyle.Italic);
                        img.AddText("Hello Qt!!", new CvPoint(50, img.Height - 50), font);

                        // cvDisplayOverlay, cvDisplayStatusBar
                        window.DisplayOverlay("overlay text", 2000);
                        window.DisplayStatusBar("statusbar text", 3000);

                        // cvCreateButton
                        CvButtonCallback buttonCallback = delegate(int state, object userdata)
                        {
                            Console.WriteLine("Button state:{0} userdata:{1} ({2})", state, userdata, userdata.GetType());
                        };
                        Cv.CreateButton("button1", buttonCallback, "my userstate", ButtonType.Checkbox, 0);
                        Cv.CreateButton("button2", buttonCallback, 12345.6789, ButtonType.Checkbox, 0);

                        // cvSaveWindowParameters
                        //window.SaveWindowParameters();
                    }

                    window.ShowImage(img);

                    // cvCreateTrackbar2
                    CvTrackbarCallback2 trackbarCallback = delegate(int pos, object userdata)
                    {
                        Console.WriteLine("Trackbar pos:{0} userdata:{1} ({2})", pos, userdata, userdata.GetType());
                    };
                    window.CreateTrackbar2("trackbar1", 128, 256, trackbarCallback, "foobar");

                    Cv.WaitKey();
                }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">ボタンの名前. (これが null の場合,”button &lt;number of boutton&gt;” という名前になります)</param>
        /// <param name="callback">ボタン状態が変更される度に呼び出されるデりゲート</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Name of the button ( if null, the name will be “button &lt;number of boutton&gt;”)</param>
        /// <param name="callback">Pointer to the function to be called every time the button changed its state.</param>
#endif
        public CvButton(string name, CvButtonCallback callback)
            : this(name, callback, IntPtr.Zero, ButtonType.PushButton, 0)
        {
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">ボタンの名前. (これが null の場合,”button &lt;number of boutton&gt;” という名前になります)</param>
        /// <param name="callback">ボタン状態が変更される度に呼び出されるデりゲート</param>
        /// <param name="userdata">コールバック関数に渡されるオブジェクト</param>
        /// <param name="button_type">ボタンの種類</param>
        /// <param name="initial_button_state">ボタンのデフォルトの状態.チェックボックスとラジオボックスの場合,これは 0 または 1 になります.</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Name of the button ( if null, the name will be “button &lt;number of boutton&gt;”)</param>
        /// <param name="callback">Pointer to the function to be called every time the button changed its state.</param>
        /// <param name="userdata">object passed to the callback function. </param>
        /// <param name="button_type">button type</param>
        /// <param name="initial_button_state">Default state of the button. Use for checkbox and radiobox, its value could be 0 or 1. </param>
#endif
        public CvButton(string name, CvButtonCallback callback, object userdata, ButtonType button_type, int initial_button_state)
        {
            _name = name;
            _userdata = userdata;

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

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

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

            _result = CvInvoke.cvCreateButton(name, callbackPtr, userdataPtr, button_type, initial_button_state);
            if (_result == 0)
                throw new OpenCvSharpException("Failed to create CvButton.");

            _instances.Add(this);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">ボタンの名前. (これが null の場合,”button &lt;number of boutton&gt;” という名前になります)</param>
        /// <param name="callback">ボタン状態が変更される度に呼び出されるデりゲート</param>
        /// <param name="userdata">コールバック関数渡されるポインタ</param>
        /// <param name="button_type">ボタンの種類</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Name of the button ( if null, the name will be “button &lt;number of boutton&gt;”)</param>
        /// <param name="callback">Pointer to the function to be called every time the button changed its state.</param>
        /// <param name="userdata">object passed to the callback function. </param>
        /// <param name="button_type">button type</param>
#endif
        public CvButton(string name, CvButtonCallback callback, object userdata, ButtonType button_type)
            : this(name, callback, userdata, button_type, 0)
        {
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">ボタンの名前. (これが null の場合,”button &lt;number of boutton&gt;” という名前になります)</param>
        /// <param name="callback">ボタン状態が変更される度に呼び出されるデりゲート</param>
        /// <param name="userdata">コールバック関数渡されるポインタ</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Name of the button ( if null, the name will be “button &lt;number of boutton&gt;”)</param>
        /// <param name="callback">Pointer to the function to be called every time the button changed its state.</param>
        /// <param name="userdata">object passed to the callback function. </param>
#endif
        public CvButton(string name, CvButtonCallback callback, object userdata)
            : this(name, callback, userdata, ButtonType.PushButton, 0)
        {
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">ボタンの名前. (これが null の場合,”button &lt;number of boutton&gt;” という名前になります)</param>
        /// <param name="callback">ボタン状態が変更される度に呼び出されるデりゲート</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Name of the button ( if null, the name will be “button &lt;number of boutton&gt;”)</param>
        /// <param name="callback">Pointer to the function to be called every time the button changed its state.</param>
#endif
        public CvButton(string name, CvButtonCallback callback)
            : this(name, callback, IntPtr.Zero, ButtonType.PushButton, 0)
        {
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">ボタンの名前. (これが null の場合,”button &lt;number of boutton&gt;” という名前になります)</param>
        /// <param name="callback">ボタン状態が変更される度に呼び出されるデりゲート</param>
        /// <param name="userdata">コールバック関数渡されるポインタ</param>
        /// <param name="button_type">ボタンの種類</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Name of the button ( if null, the name will be “button &lt;number of boutton&gt;”)</param>
        /// <param name="callback">Pointer to the function to be called every time the button changed its state.</param>
        /// <param name="userdata">object passed to the callback function. </param>
        /// <param name="button_type">button type</param>
#endif
        public CvButton(string name, CvButtonCallback callback, object userdata, ButtonType button_type)
            : this(name, callback, userdata, button_type, 0)
        {
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">ボタンの名前. (これが null の場合,”button &lt;number of boutton&gt;” という名前になります)</param>
        /// <param name="callback">ボタン状態が変更される度に呼び出されるデりゲート</param>
        /// <param name="userdata">コールバック関数渡されるポインタ</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Name of the button ( if null, the name will be “button &lt;number of boutton&gt;”)</param>
        /// <param name="callback">Pointer to the function to be called every time the button changed its state.</param>
        /// <param name="userdata">object passed to the callback function. </param>
#endif
        public CvButton(string name, CvButtonCallback callback, object userdata)
            : this(name, callback, userdata, ButtonType.PushButton, 0)
        {
        }