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
{