Browse Source

Keep reference to the parent object for the InputArray, OutputArray & InputOutputArray class.

EMGUCV_3_1
Canming Huang 9 years ago
parent
commit
1a07af431e
  1. 6
      Emgu.CV.Cuda/GpuMat.cs
  2. 6
      Emgu.CV.Extern/cmake/VectorOfObject.cs.in
  3. 6
      Emgu.CV.Extern/cmake/VectorOfStruct.cs.in
  4. 6
      Emgu.CV/Mat.cs
  5. 34
      Emgu.CV/UMat.cs
  6. 6
      Emgu.CV/Util/InputArray.cs
  7. 5
      Emgu.CV/Util/InputOutputArray.cs
  8. 4
      Emgu.CV/Util/OutputArray.cs
  9. 4
      Emgu.CV/Util/ScalarArray.cs

6
Emgu.CV.Cuda/GpuMat.cs

@ -136,7 +136,7 @@ namespace Emgu.CV.Cuda
/// </summary>
public InputArray GetInputArray()
{
return new InputArray(CudaInvoke.cveInputArrayFromGpuMat(_ptr));
return new InputArray(CudaInvoke.cveInputArrayFromGpuMat(_ptr), this);
}
/// <summary>
@ -144,7 +144,7 @@ namespace Emgu.CV.Cuda
/// </summary>
public OutputArray GetOutputArray()
{
return new OutputArray(CudaInvoke.cveOutputArrayFromGpuMat(_ptr));
return new OutputArray(CudaInvoke.cveOutputArrayFromGpuMat(_ptr), this);
}
/// <summary>
@ -152,7 +152,7 @@ namespace Emgu.CV.Cuda
/// </summary>
public InputOutputArray GetInputOutputArray()
{
return new InputOutputArray(CudaInvoke.cveInputOutputArrayFromGpuMat(_ptr));
return new InputOutputArray(CudaInvoke.cveInputOutputArrayFromGpuMat(_ptr), this);
}
/// <summary>

6
Emgu.CV.Extern/cmake/VectorOfObject.cs.in

@ -136,7 +136,7 @@ namespace ${NAMESPACE_CS}
/// </summary>
public InputArray GetInputArray()
{
return new InputArray( cvInputArrayFromVectorOf${VECTOR_NAME}(_ptr) );
return new InputArray( cvInputArrayFromVectorOf${VECTOR_NAME}(_ptr), this );
}
/// <summary>
@ -144,7 +144,7 @@ namespace ${NAMESPACE_CS}
/// </summary>
public OutputArray GetOutputArray()
{
return new OutputArray( cvOutputArrayFromVectorOf${VECTOR_NAME}(_ptr) );
return new OutputArray( cvOutputArrayFromVectorOf${VECTOR_NAME}(_ptr), this );
}
/// <summary>
@ -152,7 +152,7 @@ namespace ${NAMESPACE_CS}
/// </summary>
public InputOutputArray GetInputOutputArray()
{
return new InputOutputArray( cvInputOutputArrayFromVectorOf${VECTOR_NAME}(_ptr) );
return new InputOutputArray( cvInputOutputArrayFromVectorOf${VECTOR_NAME}(_ptr), this );
}
/// <summary>

6
Emgu.CV.Extern/cmake/VectorOfStruct.cs.in

@ -193,7 +193,7 @@ namespace ${NAMESPACE_CS}
/// </summary>
public InputArray GetInputArray()
{
return new InputArray( cvInputArrayFromVectorOf${VECTOR_NAME}(_ptr) );
return new InputArray( cvInputArrayFromVectorOf${VECTOR_NAME}(_ptr), this );
}
/// <summary>
@ -201,7 +201,7 @@ namespace ${NAMESPACE_CS}
/// </summary>
public OutputArray GetOutputArray()
{
return new OutputArray( cvOutputArrayFromVectorOf${VECTOR_NAME}(_ptr) );
return new OutputArray( cvOutputArrayFromVectorOf${VECTOR_NAME}(_ptr), this );
}
/// <summary>
@ -209,7 +209,7 @@ namespace ${NAMESPACE_CS}
/// </summary>
public InputOutputArray GetInputOutputArray()
{
return new InputOutputArray( cvInputOutputArrayFromVectorOf${VECTOR_NAME}(_ptr) );
return new InputOutputArray( cvInputOutputArrayFromVectorOf${VECTOR_NAME}(_ptr), this );
}
/// <summary>

6
Emgu.CV/Mat.cs

@ -618,7 +618,7 @@ namespace Emgu.CV
/// </summary>
public InputArray GetInputArray()
{
return new InputArray(MatInvoke.cveInputArrayFromMat(_ptr));
return new InputArray(MatInvoke.cveInputArrayFromMat(_ptr), this);
}
/// <summary>
@ -626,7 +626,7 @@ namespace Emgu.CV
/// </summary>
public OutputArray GetOutputArray()
{
return new OutputArray(MatInvoke.cveOutputArrayFromMat(_ptr));
return new OutputArray(MatInvoke.cveOutputArrayFromMat(_ptr), this);
}
/// <summary>
@ -634,7 +634,7 @@ namespace Emgu.CV
/// </summary>
public InputOutputArray GetInputOutputArray()
{
return new InputOutputArray(MatInvoke.cveInputOutputArrayFromMat(_ptr));
return new InputOutputArray(MatInvoke.cveInputOutputArrayFromMat(_ptr), this);
}

34
Emgu.CV/UMat.cs

@ -32,7 +32,7 @@ namespace Emgu.CV
, ISerializable
#endif
{
#if !NETFX_CORE
#if !NETFX_CORE
#region Implement ISerializable interface
/// <summary>
/// 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
/// </summary>
public InputArray GetInputArray()
{
return new InputArray(UMatInvoke.cveInputArrayFromUMat(_ptr));
return new InputArray(UMatInvoke.cveInputArrayFromUMat(_ptr), this);
}
/// <summary>
@ -384,7 +384,7 @@ namespace Emgu.CV
/// </summary>
public OutputArray GetOutputArray()
{
return new OutputArray( UMatInvoke.cveOutputArrayFromUMat(_ptr) );
return new OutputArray(UMatInvoke.cveOutputArrayFromUMat(_ptr), this);
}
/// <summary>
@ -392,7 +392,7 @@ namespace Emgu.CV
/// </summary>
public InputOutputArray GetInputOutputArray()
{
return new InputOutputArray( UMatInvoke.cveInputOutputArrayFromUMat(_ptr) );
return new InputOutputArray(UMatInvoke.cveInputOutputArrayFromUMat(_ptr), this);
}
/// <summary>
@ -481,15 +481,15 @@ namespace Emgu.CV
//same depth, different color
Image<TColor, TDepth> result = new Image<TColor, TDepth>(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<Rgba, Byte> tmp = ToImage<Rgba, Byte>())
@ -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)
/// <summary>
/// The Get property provide a more efficient way to convert Image&lt;Gray, Byte&gt;, Image&lt;Bgr, Byte&gt; and Image&lt;Bgra, Byte&gt; into Bitmap
/// such that the image data is <b>shared</b> with Bitmap.
@ -545,7 +545,7 @@ namespace Emgu.CV
/// </summary>
public Bitmap Bitmap
{
get
get
{
using (Mat tmp = GetMat(CvEnum.AccessType.Read))
{
@ -553,7 +553,7 @@ namespace Emgu.CV
}
}
}
#endif
#endif
/// <summary>
/// Returns the min / max location and values for the image
@ -681,7 +681,7 @@ namespace Emgu.CV
public void CopyTo<T>(T[] data)
{
Debug.Assert(
Toolbox.SizeOf<T>() * data.Length >= Total.ToInt32() * ElementSize,
Toolbox.SizeOf<T>() * 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<T>(), data.Length));
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
UMatInvoke.cveUMatCopyDataTo(this, handle.AddrOfPinnedObject());

6
Emgu.CV/Util/InputArray.cs

@ -100,13 +100,17 @@ namespace Emgu.CV
{
}
private object _parent;
/// <summary>
/// Create a Input array from an existing unmanaged inputArray pointer
/// </summary>
/// <param name="inputArrayPtr">The unmanaged pointer the the InputArray</param>
public InputArray(IntPtr inputArrayPtr)
/// <param name="parent">The parent object to keep reference to</param>
public InputArray(IntPtr inputArrayPtr, object parent)
{
_ptr = inputArrayPtr;
_parent = parent;
}
private static InputArray _empty = new InputArray();

5
Emgu.CV/Util/InputOutputArray.cs

@ -22,10 +22,9 @@ namespace Emgu.CV
/// Create an InputOutputArray from an existing unmanaged inputOutputArray pointer
/// </summary>
/// <param name="inputOutputArrayPtr">The pointer to the existing inputOutputArray</param>
public InputOutputArray(IntPtr inputOutputArrayPtr)
: base(inputOutputArrayPtr)
public InputOutputArray(IntPtr inputOutputArrayPtr, object parent)
: base(inputOutputArrayPtr, parent)
{
_ptr = inputOutputArrayPtr;
}
private static InputOutputArray _empty = new InputOutputArray();

4
Emgu.CV/Util/OutputArray.cs

@ -22,8 +22,8 @@ namespace Emgu.CV
/// Create an OutputArray from an existing unmanaged outputArray pointer
/// </summary>
/// <param name="outputArrayPtr">The pointer to the unmanaged outputArray</param>
public OutputArray(IntPtr outputArrayPtr)
: base(outputArrayPtr)
public OutputArray(IntPtr outputArrayPtr, object parent)
: base(outputArrayPtr, parent)
{
}

4
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
{

Loading…
Cancel
Save