Using EGrabberBridge

using Euresys;
using Euresys.EGrabber;
using Euresys.Open_eVision;
using System;

static partial class Snippet
{
  static void UsingEGrabberBridge()
  {
    /////////////////////////////////////////////////////////////////////
    // This code snippet shows how to convert an EGrabber buffer to an //
    // EImageBW8.                                                      //
    /////////////////////////////////////////////////////////////////////

    // Construct the EGrabber objects.
    // WARNING: EGrabber is using an EGenTL instance,
    // you must dispose of EGenTL before disposing of EGrabber.
    Euresys.EGrabber.EGenTL genTL = new Euresys.EGrabber.EGenTL();
    EGrabber grabber = new EGrabber(genTL);

    // Allocate one buffer
    grabber.ReallocBuffers(1);

    //....

    // Start the grabber acquisition of one buffer
    grabber.Start(1);

    // Get the acquired buffer
    using (Euresys.EGrabber.ScopedBuffer buffer = new Euresys.EGrabber.ScopedBuffer(grabber))
    {
      // Convert the ScopedBuffer to an Open eVision data container
      ulong width = (ulong)buffer.GetInfo<SizeT>(BUFFER_INFO_CMD.BUFFER_INFO_WIDTH);
      ulong height = (ulong)buffer.GetInfo<SizeT>(BUFFER_INFO_CMD.BUFFER_INFO_HEIGHT);
      IntPtr ptr = buffer.GetInfo<IntPtr>(BUFFER_INFO_CMD.BUFFER_INFO_BASE);
      ulong pitch = (ulong)buffer.GetInfo<SizeT>(BUFFER_INFO_CMD.BUFFER_INFO_CUSTOM_LINE_PITCH);

      EImageBW8 image = new EImageBW8();
      image.SetImagePtr((int)width, (int)height, ptr, (int)pitch);

      // Here the image is inverted
      EImageBW8 invertedImage = new EImageBW8(image.Width, image.Height);
      EasyImage.Oper(EArithmeticLogicOperation.Invert, image, invertedImage);
    }
  }
}
#include <EGrabber.h>
#include <FormatConverter.h>
#include <Open_eVision.h>

void UsingEGrabberBridge()
{
  /////////////////////////////////////////////////////////////////////
  // This code snippet shows how to go from an EGrabber buffer to an //
  // EGrabberImageBW8, compatible with Open eVision processing       //
  /////////////////////////////////////////////////////////////////////
  using namespace Euresys::Open_eVision;
  using namespace Euresys;

  // Construct the EGrabber objects.
  // The FormatConverter is optional and will automatically convert the EGenTL buffer to
  // the chosen Open eVision image type
  // WARNING: EGrabberCallbackOnDemand and FormatConverter are using an EGenTL instance, you must dispose them before disposing it.
  EGenTL genTL;
  EGrabber<CallbackOnDemand> grabber(genTL);

  // Allocate one buffer
  grabber.reallocBuffers(1);

  //...

  // Start the grabber acquisition of one buffer
  grabber.start(1);

  // Get the acquired buffer
  ScopedBuffer buffer(grabber);

  // Convert the ScopedBuffer to an Open eVision data container
  EGrabberBridge::EGrabberImageBW8 image(buffer.getInfo());

  // Stop the grabber
  grabber.stop();

  // Use the EGrabberImageBW8 as an Open eVision EImage Object
  // Here an inversion of the image is performed
  EImageBW8 invertedImage(image.GetWidth(), image.GetHeight());
  EasyImage::Oper(EArithmeticLogicOperation_Invert, &image, &invertedImage);
}
def UsingEGrabberBridge():
    #####################################################################
    ## This code snippet shows how to go from an EGrabber buffer to an ##
    ## EGrabberImageBW8, compatible with Open eVision processing       ##
    #####################################################################
    import open_evision as oev
    import egrabber
    import egentl

    # Construct the EGrabber objects.
    genTL = egentl.EGenTL()
    grabber = egrabber.EGrabber(genTL)

    # Allocate one buffer
    grabber.realloc_buffers(1)

    # ...

    # Start the grabber acquisition of one buffer
    grabber.start(1)

    # Get the acquired buffer
    with egrabber.Buffer(grabber) as buffer:
        # Convert the ScopedBuffer to an Open eVision data container
        w = buffer.get_info(egrabber.BUFFER_INFO_WIDTH, egrabber.INFO_DATATYPE_SIZET)
        h = buffer.get_info(egrabber.BUFFER_INFO_HEIGHT, egrabber.INFO_DATATYPE_SIZET)
        ptr = buffer.get_info(egrabber.BUFFER_INFO_BASE, egrabber.INFO_DATATYPE_PTR)
        pitch = buffer.get_info(egrabber.BUFFER_INFO_CUSTOM_LINE_PITCH, egrabber.INFO_DATATYPE_SIZET)

        image = oev.EImageBW8()
        image.SetImagePtr(w, h, ptr, pitch * 8)

        # Here an inversion to the image is performed
        inverted_image = oev.EImageBW8(image.Width, image.Height)
        oev.EasyImage.Oper(oev.EArithmeticLogicOperation.Invert, image, inverted_image)