Browse Source

Added Mcc.CCheckerDraw.

pull/348/merge
Canming Huang 5 years ago
parent
commit
8bed99b883
  1. 67
      Emgu.CV.Contrib/Mcc/CCheckerDraw.cs
  2. 41
      Emgu.CV.Extern/mcc/mcc_c.cpp
  3. 9
      Emgu.CV.Extern/mcc/mcc_c.h

67
Emgu.CV.Contrib/Mcc/CCheckerDraw.cs

@ -0,0 +1,67 @@
//----------------------------------------------------------------------------
// Copyright (C) 2004-2020 by EMGU Corporation. All rights reserved.
//----------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.CV.Util;
using Emgu.Util;
namespace Emgu.CV.Mcc
{
public partial class CCheckerDraw : SharedPtrObject
{
public CCheckerDraw(CChecker cchecker, MCvScalar color, int thickness)
{
_ptr = MccInvoke.cveCCheckerDrawCreate(cchecker, ref color, thickness, ref _sharedPtr);
}
public void Draw(IInputOutputArray img)
{
using (InputOutputArray ioaImg = img.GetInputOutputArray())
{
MccInvoke.cveCCheckerDrawDraw(_ptr, ioaImg);
}
}
/// <summary>
/// Release the unmanaged memory associated with this object
/// </summary>
protected override void DisposeObject()
{
if (_sharedPtr == IntPtr.Zero)
{
MccInvoke.cveCCheckerDrawRelease(ref _sharedPtr);
_ptr = IntPtr.Zero;
}
}
}
/// <summary>
/// Class that contains entry points for the Mcc module.
/// </summary>
public static partial class MccInvoke
{
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveCCheckerDrawCreate(
IntPtr pChecker,
ref MCvScalar color,
int thickness,
ref IntPtr sharedPtr);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveCCheckerDrawDraw(IntPtr ccheckerDraw, IntPtr img);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveCCheckerDrawRelease(ref IntPtr sharedPtr);
}
}

41
Emgu.CV.Extern/mcc/mcc_c.cpp

@ -18,10 +18,49 @@ cv::mcc::CChecker* cveCCheckerCreate(cv::Ptr<cv::mcc::CChecker>** sharedPtr)
}
void cveCCheckerRelease(cv::Ptr<cv::mcc::CChecker>** sharedPtr)
{
#ifdef HAVE_OPENCV_RAPID
#ifdef HAVE_OPENCV_MCC
delete* sharedPtr;
*sharedPtr = 0;
#else
throw_no_mcc();
#endif
}
cv::mcc::CCheckerDraw* cveCCheckerDrawCreate(
cv::mcc::CChecker* pChecker,
CvScalar* color,
int thickness,
cv::Ptr<cv::mcc::CCheckerDraw>** sharedPtr)
{
#ifdef HAVE_OPENCV_MCC
cv::Ptr<cv::mcc::CChecker> cCheckerPtr(pChecker, [](cv::mcc::CChecker* p) {});
cv::Ptr<cv::mcc::CCheckerDraw> checkerDraw = cv::mcc::CCheckerDraw::create(
cCheckerPtr,
*color,
thickness);
*sharedPtr = new cv::Ptr<cv::mcc::CCheckerDraw>(checkerDraw);
return (*sharedPtr)->get();
#else
throw_no_mcc();
#endif
}
void cveCCheckerDrawDraw(cv::mcc::CCheckerDraw* ccheckerDraw, cv::_InputOutputArray* img)
{
#ifdef HAVE_OPENCV_MCC
ccheckerDraw->draw(*img);
#else
throw_no_mcc();
#endif
}
void cveCCheckerDrawRelease(cv::Ptr<cv::mcc::CCheckerDraw>** sharedPtr)
{
#ifdef HAVE_OPENCV_MCC
delete* sharedPtr;
*sharedPtr = 0;
#else
throw_no_mcc();
#endif
}

9
Emgu.CV.Extern/mcc/mcc_c.h

@ -20,4 +20,13 @@ static inline CV_NORETURN void throw_no_mcc() { CV_Error(cv::Error::StsBadFunc,
CVAPI(cv::mcc::CChecker*) cveCCheckerCreate(cv::Ptr<cv::mcc::CChecker>** sharedPtr);
CVAPI(void) cveCCheckerRelease(cv::Ptr<cv::mcc::CChecker>** sharedPtr);
CVAPI(cv::mcc::CCheckerDraw*) cveCCheckerDrawCreate(
cv::mcc::CChecker* pChecker,
CvScalar* color,
int thickness,
cv::Ptr<cv::mcc::CCheckerDraw>** sharedPtr);
CVAPI(void) cveCCheckerDrawDraw(cv::mcc::CCheckerDraw* ccheckerDraw, cv::_InputOutputArray* img);
CVAPI(void) cveCCheckerDrawRelease(cv::Ptr<cv::mcc::CCheckerDraw>** sharedPtr);
#endif
Loading…
Cancel
Save