diff --git a/Emgu.CV.Cuda/GpuMat.cs b/Emgu.CV.Cuda/GpuMat.cs index acaea600b..1a3bec14a 100644 --- a/Emgu.CV.Cuda/GpuMat.cs +++ b/Emgu.CV.Cuda/GpuMat.cs @@ -136,7 +136,7 @@ namespace Emgu.CV.Cuda /// public InputArray GetInputArray() { - return new InputArray(CudaInvoke.cveInputArrayFromGpuMat(_ptr)); + return new InputArray(CudaInvoke.cveInputArrayFromGpuMat(_ptr), this); } /// @@ -144,7 +144,7 @@ namespace Emgu.CV.Cuda /// public OutputArray GetOutputArray() { - return new OutputArray(CudaInvoke.cveOutputArrayFromGpuMat(_ptr)); + return new OutputArray(CudaInvoke.cveOutputArrayFromGpuMat(_ptr), this); } /// @@ -152,7 +152,7 @@ namespace Emgu.CV.Cuda /// public InputOutputArray GetInputOutputArray() { - return new InputOutputArray(CudaInvoke.cveInputOutputArrayFromGpuMat(_ptr)); + return new InputOutputArray(CudaInvoke.cveInputOutputArrayFromGpuMat(_ptr), this); } /// diff --git a/Emgu.CV.Extern/cmake/VectorOfObject.cs.in b/Emgu.CV.Extern/cmake/VectorOfObject.cs.in index 09b6b9642..97207e09a 100644 --- a/Emgu.CV.Extern/cmake/VectorOfObject.cs.in +++ b/Emgu.CV.Extern/cmake/VectorOfObject.cs.in @@ -136,7 +136,7 @@ namespace ${NAMESPACE_CS} /// public InputArray GetInputArray() { - return new InputArray( cvInputArrayFromVectorOf${VECTOR_NAME}(_ptr) ); + return new InputArray( cvInputArrayFromVectorOf${VECTOR_NAME}(_ptr), this ); } /// @@ -144,7 +144,7 @@ namespace ${NAMESPACE_CS} /// public OutputArray GetOutputArray() { - return new OutputArray( cvOutputArrayFromVectorOf${VECTOR_NAME}(_ptr) ); + return new OutputArray( cvOutputArrayFromVectorOf${VECTOR_NAME}(_ptr), this ); } /// @@ -152,7 +152,7 @@ namespace ${NAMESPACE_CS} /// public InputOutputArray GetInputOutputArray() { - return new InputOutputArray( cvInputOutputArrayFromVectorOf${VECTOR_NAME}(_ptr) ); + return new InputOutputArray( cvInputOutputArrayFromVectorOf${VECTOR_NAME}(_ptr), this ); } /// diff --git a/Emgu.CV.Extern/cmake/VectorOfStruct.cs.in b/Emgu.CV.Extern/cmake/VectorOfStruct.cs.in index 8d3a00f07..e9c5433a9 100644 --- a/Emgu.CV.Extern/cmake/VectorOfStruct.cs.in +++ b/Emgu.CV.Extern/cmake/VectorOfStruct.cs.in @@ -193,7 +193,7 @@ namespace ${NAMESPACE_CS} /// public InputArray GetInputArray() { - return new InputArray( cvInputArrayFromVectorOf${VECTOR_NAME}(_ptr) ); + return new InputArray( cvInputArrayFromVectorOf${VECTOR_NAME}(_ptr), this ); } /// @@ -201,7 +201,7 @@ namespace ${NAMESPACE_CS} /// public OutputArray GetOutputArray() { - return new OutputArray( cvOutputArrayFromVectorOf${VECTOR_NAME}(_ptr) ); + return new OutputArray( cvOutputArrayFromVectorOf${VECTOR_NAME}(_ptr), this ); } /// @@ -209,7 +209,7 @@ namespace ${NAMESPACE_CS} /// public InputOutputArray GetInputOutputArray() { - return new InputOutputArray( cvInputOutputArrayFromVectorOf${VECTOR_NAME}(_ptr) ); + return new InputOutputArray( cvInputOutputArrayFromVectorOf${VECTOR_NAME}(_ptr), this ); } /// diff --git a/Emgu.CV/Mat.cs b/Emgu.CV/Mat.cs index 690a8b0f5..282d74e08 100644 --- a/Emgu.CV/Mat.cs +++ b/Emgu.CV/Mat.cs @@ -618,7 +618,7 @@ namespace Emgu.CV /// public InputArray GetInputArray() { - return new InputArray(MatInvoke.cveInputArrayFromMat(_ptr)); + return new InputArray(MatInvoke.cveInputArrayFromMat(_ptr), this); } /// @@ -626,7 +626,7 @@ namespace Emgu.CV /// public OutputArray GetOutputArray() { - return new OutputArray(MatInvoke.cveOutputArrayFromMat(_ptr)); + return new OutputArray(MatInvoke.cveOutputArrayFromMat(_ptr), this); } /// @@ -634,7 +634,7 @@ namespace Emgu.CV /// public InputOutputArray GetInputOutputArray() { - return new InputOutputArray(MatInvoke.cveInputOutputArrayFromMat(_ptr)); + return new InputOutputArray(MatInvoke.cveInputOutputArrayFromMat(_ptr), this); } diff --git a/Emgu.CV/UMat.cs b/Emgu.CV/UMat.cs index 27925d162..802d1915b 100644 --- a/Emgu.CV/UMat.cs +++ b/Emgu.CV/UMat.cs @@ -32,7 +32,7 @@ namespace Emgu.CV , ISerializable #endif { - #if !NETFX_CORE +#if !NETFX_CORE #region Implement ISerializable interface /// /// Constructor used to deserialize runtime serialized object @@ -54,9 +54,9 @@ namespace Emgu.CV { int rows = (int)info.GetValue("Rows", typeof(int)); int cols = (int)info.GetValue("Cols", typeof(int)); - int depthType = (int) info.GetValue("DepthType", typeof (int)); + int depthType = (int)info.GetValue("DepthType", typeof(int)); int numberOfChannels = (int)info.GetValue("NumberOfChannels", typeof(int)); - Create(rows, cols, (DepthType) depthType, numberOfChannels ); + Create(rows, cols, (DepthType)depthType, numberOfChannels); Bytes = (Byte[])info.GetValue("Bytes", typeof(Byte[])); } @@ -71,7 +71,7 @@ namespace Emgu.CV info.AddValue("Cols", Cols); info.AddValue("DepthType", (int)Depth); info.AddValue("NumberOfChannels", NumberOfChannels); - info.AddValue("Bytes", Bytes); + info.AddValue("Bytes", Bytes); } #endregion @@ -376,7 +376,7 @@ namespace Emgu.CV /// public InputArray GetInputArray() { - return new InputArray(UMatInvoke.cveInputArrayFromUMat(_ptr)); + return new InputArray(UMatInvoke.cveInputArrayFromUMat(_ptr), this); } /// @@ -384,7 +384,7 @@ namespace Emgu.CV /// public OutputArray GetOutputArray() { - return new OutputArray( UMatInvoke.cveOutputArrayFromUMat(_ptr) ); + return new OutputArray(UMatInvoke.cveOutputArrayFromUMat(_ptr), this); } /// @@ -392,7 +392,7 @@ namespace Emgu.CV /// public InputOutputArray GetInputOutputArray() { - return new InputOutputArray( UMatInvoke.cveInputOutputArrayFromUMat(_ptr) ); + return new InputOutputArray(UMatInvoke.cveInputOutputArrayFromUMat(_ptr), this); } /// @@ -481,15 +481,15 @@ namespace Emgu.CV //same depth, different color Image result = new Image(Size); Type t = numberOfChannels == 1 - ? typeof (Gray) + ? typeof(Gray) : numberOfChannels == 3 - ? typeof (Bgr) + ? typeof(Bgr) : numberOfChannels == 4 - ? typeof (Bgra) + ? typeof(Bgra) : null; if (t == null) throw new Exception("Unsupported conversion"); - CvInvoke.CvtColor(this, result, t, typeof(TColor) ); + CvInvoke.CvtColor(this, result, t, typeof(TColor)); /* if (numberOfChannels == 1) { @@ -512,7 +512,7 @@ namespace Emgu.CV }*/ return result; - + } else { @@ -526,7 +526,7 @@ namespace Emgu.CV } } - #if __IOS__ +#if __IOS__ public UIImage ToUIImage() { using (Image tmp = ToImage()) @@ -534,7 +534,7 @@ namespace Emgu.CV return tmp.ToUIImage(); } } -#elif ! ( NETFX_CORE || UNITY_ANDROID || UNITY_IPHONE || UNITY_STANDALONE || UNITY_METRO || UNITY_EDITOR ) +#elif !(NETFX_CORE || UNITY_ANDROID || UNITY_IPHONE || UNITY_STANDALONE || UNITY_METRO || UNITY_EDITOR) /// /// The Get property provide a more efficient way to convert Image<Gray, Byte>, Image<Bgr, Byte> and Image<Bgra, Byte> into Bitmap /// such that the image data is shared with Bitmap. @@ -545,7 +545,7 @@ namespace Emgu.CV /// public Bitmap Bitmap { - get + get { using (Mat tmp = GetMat(CvEnum.AccessType.Read)) { @@ -553,7 +553,7 @@ namespace Emgu.CV } } } - #endif +#endif /// /// Returns the min / max location and values for the image @@ -681,7 +681,7 @@ namespace Emgu.CV public void CopyTo(T[] data) { Debug.Assert( - Toolbox.SizeOf() * data.Length >= Total.ToInt32() * ElementSize, + Toolbox.SizeOf() * data.Length >= Total.ToInt32() * ElementSize, String.Format("Size of data is not enough, required at least {0}, but was {1} ", Total.ToInt32() * ElementSize / Toolbox.SizeOf(), data.Length)); GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); UMatInvoke.cveUMatCopyDataTo(this, handle.AddrOfPinnedObject()); diff --git a/Emgu.CV/Util/InputArray.cs b/Emgu.CV/Util/InputArray.cs index b39fb969d..ddbcc6b7f 100644 --- a/Emgu.CV/Util/InputArray.cs +++ b/Emgu.CV/Util/InputArray.cs @@ -100,13 +100,17 @@ namespace Emgu.CV { } + private object _parent; + /// /// Create a Input array from an existing unmanaged inputArray pointer /// /// The unmanaged pointer the the InputArray - public InputArray(IntPtr inputArrayPtr) + /// The parent object to keep reference to + public InputArray(IntPtr inputArrayPtr, object parent) { _ptr = inputArrayPtr; + _parent = parent; } private static InputArray _empty = new InputArray(); diff --git a/Emgu.CV/Util/InputOutputArray.cs b/Emgu.CV/Util/InputOutputArray.cs index e9613e396..da82a5c98 100644 --- a/Emgu.CV/Util/InputOutputArray.cs +++ b/Emgu.CV/Util/InputOutputArray.cs @@ -22,10 +22,9 @@ namespace Emgu.CV /// Create an InputOutputArray from an existing unmanaged inputOutputArray pointer /// /// The pointer to the existing inputOutputArray - public InputOutputArray(IntPtr inputOutputArrayPtr) - : base(inputOutputArrayPtr) + public InputOutputArray(IntPtr inputOutputArrayPtr, object parent) + : base(inputOutputArrayPtr, parent) { - _ptr = inputOutputArrayPtr; } private static InputOutputArray _empty = new InputOutputArray(); diff --git a/Emgu.CV/Util/OutputArray.cs b/Emgu.CV/Util/OutputArray.cs index b1e02948b..1a24e6757 100644 --- a/Emgu.CV/Util/OutputArray.cs +++ b/Emgu.CV/Util/OutputArray.cs @@ -22,8 +22,8 @@ namespace Emgu.CV /// Create an OutputArray from an existing unmanaged outputArray pointer /// /// The pointer to the unmanaged outputArray - public OutputArray(IntPtr outputArrayPtr) - : base(outputArrayPtr) + public OutputArray(IntPtr outputArrayPtr, object parent) + : base(outputArrayPtr, parent) { } diff --git a/Emgu.CV/Util/ScalarArray.cs b/Emgu.CV/Util/ScalarArray.cs index 52369b689..8d34b1706 100644 --- a/Emgu.CV/Util/ScalarArray.cs +++ b/Emgu.CV/Util/ScalarArray.cs @@ -96,10 +96,10 @@ namespace Emgu.CV public InputArray GetInputArray() { if (_dataType == DataType.Scalar) - return new InputArray(cveInputArrayFromScalar(_ptr)); + return new InputArray(cveInputArrayFromScalar(_ptr), this); else if (_dataType == DataType.Double) { - return new InputArray(cveInputArrayFromDouble(_ptr)); + return new InputArray(cveInputArrayFromDouble(_ptr), this); } else {