/// <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."); } }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar(string name, CvTrackbarCallback2 callback) { CvTrackbar trackbar = new CvTrackbar(name, this.name, callback); trackbars.Add(name, trackbar); return(trackbar); }
/// <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, CvTrackbarCallback2 callback) { 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; gchValue = GCHandle.Alloc(value, GCHandleType.Pinned); gchCallback = GCHandle.Alloc(callback); IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(callback); result = NativeMethods.highgui_createTrackbar(name, window, ref this.value, max, callbackPtr, IntPtr.Zero); if (result == 0) { throw new OpenCvSharpException("Failed to create CvTrackbar."); } }
internal static extern int cvCreateTrackbar2( string trackbar_name, string window_name, ref int value, int count, CvTrackbarCallback2 on_change, IntPtr userdata);
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar(string name, int value, int max, CvTrackbarCallback2 callback) { var trackbar = new CvTrackbar(name, this.name, value, max, callback, null); trackbars.Add(name, trackbar); return(trackbar); }
/// <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, CvTrackbarCallback2 callback) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); if (string.IsNullOrEmpty(window)) throw new ArgumentNullException("window"); if (callback == null) throw new ArgumentNullException("callback"); this.name = name; this.window = window; this.value = value; this.max = max; this.callback = callback; gchValue = GCHandle.Alloc(value, GCHandleType.Pinned); gchCallback = GCHandle.Alloc(callback); IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(callback); #if DEBUG int result = NativeMethods.cvCreateTrackbar(name, window, ref value, max, callback); #else result = NativeMethods.highgui_createTrackbar(name, window, ref value, max, callbackPtr, IntPtr.Zero); #endif if (result == 0) throw new OpenCvSharpException("Failed to create CvTrackbar."); }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> /// <param name="userdata"></param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <param name="userdata"></param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar2(string name, int value, int max, CvTrackbarCallback2 callback, object userdata) { CvTrackbar trackbar = new CvTrackbar(name, this.name, value, max, callback, userdata); trackbars.Add(name, trackbar); return(trackbar); }
/// <summary> /// Creates a trackbar and attaches it to the specified window. /// The function createTrackbar creates a trackbar(a slider or range control) with the specified name /// and range, assigns a variable value to be a position synchronized with the trackbar and specifies /// the callback function onChange to be called on the trackbar position change.The created trackbar is /// displayed in the specified window winname. /// </summary> /// <param name="trackbarName">Name of the created trackbar.</param> /// <param name="winName">Name of the window that will be used as a parent of the created trackbar.</param> /// <param name="value">Optional pointer to an integer variable whose value reflects the position of the slider.Upon creation, /// the slider position is defined by this variable.</param> /// <param name="count">Maximal position of the slider. The minimal position is always 0.</param> /// <param name="onChange">Pointer to the function to be called every time the slider changes position. /// This function should be prototyped as void Foo(int, void\*); , where the first parameter is the trackbar /// position and the second parameter is the user data(see the next parameter). If the callback is /// the NULL pointer, no callbacks are called, but only value is updated.</param> /// <param name="userdata">User data that is passed as is to the callback. It can be used to handle trackbar events without using global variables.</param> /// <returns></returns> public static int CreateTrackbar(string trackbarName, string winName, ref int value, int count, CvTrackbarCallback2 onChange = null, IntPtr userdata = default(IntPtr)) { if (trackbarName == null) { throw new ArgumentNullException(nameof(trackbarName)); } if (winName == null) { throw new ArgumentNullException(nameof(winName)); } if (onChange == null) { return(NativeMethods.highgui_createTrackbar(trackbarName, winName, ref value, count, IntPtr.Zero, userdata)); } return(NativeMethods.highgui_createTrackbar(trackbarName, winName, ref value, count, onChange, userdata)); }
public Mat Crop() { using (CroppingWindow = new OpenCvSharp.Window("Cropper", WindowMode.FullScreen, srcImage)) { CvMouseCallback onMouse = new CvMouseCallback(mouseCallback); CroppingWindow.SetMouseCallback(onMouse); CvTrackbarCallback2 onZoom = new CvTrackbarCallback2(trackbarCallback); CvTrackbar zoom = CroppingWindow.CreateTrackbar2("Zoom", 100, 200, onZoom, null); Cv2.WaitKey(); // This line is very important // OpenCV is written in C++, which means it's unmanaged. // So when a delegate callback variable is passed to it as a function point, // GC in C# can no longer identify the life cycle of this delegate variable // It's our reponsebility to make sure GC in C# will not collect it when it's still in use. // Otherwise an exception will be thrown. GC.KeepAlive(onMouse); } // seems that srcImage will be released by GC, so I must return a copy of it return(srcImage.Clone()); }
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(); } }
public static extern int highgui_createTrackbar([MarshalAs(UnmanagedType.LPStr)] string trackbarName, [MarshalAs(UnmanagedType.LPStr)] string winName, ref int value, int count, [MarshalAs(UnmanagedType.FunctionPtr)] CvTrackbarCallback2 onChange, IntPtr userData);
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> /// <param name="userdata"></param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <param name="userdata"></param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar2(string name, int value, int max, CvTrackbarCallback2 callback, object userdata) { CvTrackbar trackbar = new CvTrackbar(name, this._name, value, max, callback, userdata); _trackbars.Add(name, trackbar); return trackbar; }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar(string name, int value, int max, CvTrackbarCallback2 callback) { CvTrackbar trackbar = new CvTrackbar(name, this.name, value, max, callback); trackbars.Add(name, trackbar); return trackbar; }
/// <summary> /// 初期化(目盛りは0~100) /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="window">トラックバーの親ウィンドウ名</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Constructor (value=0, max=100) /// </summary> /// <param name="name">Trackbar name</param> /// <param name="window">Window name</param> /// <param name="callback">Callback handler</param> #endif public CvTrackbar(string name, string window, CvTrackbarCallback2 callback) : this(name, window, 0, 100, callback) { }
/// <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."); }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="trackbarName">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> /// <param name="userdata"></param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="trackbarName">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <param name="userdata"></param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar2(string trackbarName, int value, int max, CvTrackbarCallback2 callback, object userdata) { var trackbar = new CvTrackbar(trackbarName, name, value, max, callback, userdata); trackbars.Add(trackbarName, trackbar); return trackbar; }
/// <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."); }