/// <summary> /// 初期化 /// </summary> /// <param name="name">ボタンの名前. (これが null の場合,”button <number of boutton>” という名前になります)</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 <number of boutton>”)</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); }
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(); } }
/// <summary> /// 初期化 /// </summary> /// <param name="name">ボタンの名前. (これが null の場合,”button <number of boutton>” という名前になります)</param> /// <param name="callback">ボタン状態が変更される度に呼び出されるデりゲート</param> #else /// <summary> /// Constructor /// </summary> /// <param name="name">Name of the button ( if null, the name will be “button <number of boutton>”)</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) { }
/// <summary> /// 初期化 /// </summary> /// <param name="name">ボタンの名前. (これが null の場合,”button <number of boutton>” という名前になります)</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 <number of boutton>”)</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); }
/// <summary> /// 初期化 /// </summary> /// <param name="name">ボタンの名前. (これが null の場合,”button <number of boutton>” という名前になります)</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 <number of boutton>”)</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) { }
/// <summary> /// 初期化 /// </summary> /// <param name="name">ボタンの名前. (これが null の場合,”button <number of boutton>” という名前になります)</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 <number of boutton>”)</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) { }