protected void EnqueueTakenImage(PylonGrabResult_t grabResult) { PylonBuffer <Byte> buffer; /* Reference to the buffer attached to the grab result. */ /* Get the buffer from the dictionary. */ if (!m_buffers.TryGetValue(grabResult.hBuffer, out buffer)) { /* Oops. No buffer available? We should never have reached this point. Since all buffers are * in the dictionary. */ throw new Exception("Failed to find the buffer associated with the handle returned in grab result."); } /* Create a new grab result to enqueue to the grabbed buffers list. */ GrabResult newGrabResultInternal = new GrabResult(); newGrabResultInternal.Handle = grabResult.hBuffer; /* Add the handle to requeue the buffer in the stream grabber queue. */ /* If already in output format add the image data. */ if (grabResult.PixelType == EPylonPixelType.PixelType_Mono8 || grabResult.PixelType == EPylonPixelType.PixelType_RGBA8packed) { newGrabResultInternal.ImageData = new Image(grabResult.SizeX, grabResult.SizeY, buffer.Array, grabResult.PixelType == EPylonPixelType.PixelType_RGBA8packed); } else /* Conversion is required. */ { /* Create a new format converter if needed. */ if (!m_hConverter.IsValid) { m_convertedBuffers = new Dictionary <PYLON_STREAMBUFFER_HANDLE, PylonBuffer <byte> >(); /* Create a new dictionary for the converted buffers. */ m_hConverter = Pylon.PixelFormatConverterCreate(m_hDevice, 1); /* Create the converter. */ m_converterOutputFormatIsColor = !Pylon.IsMono(grabResult.PixelType) || Pylon.IsBayer(grabResult.PixelType); } /* Reference to the buffer attached to the grab result handle. */ PylonBuffer <Byte> convertedBuffer = null; /* Look up if a buffer is already attached to the handle. */ bool bufferListed = m_convertedBuffers.TryGetValue(grabResult.hBuffer, out convertedBuffer); /* Perform the conversion. If the buffer is null a new one is automatically created. */ Pylon.PixelFormatConverterConvert(m_hConverter, ref convertedBuffer, buffer); if (!bufferListed) /* A new buffer has been created. Add it to the dictionary. */ { m_convertedBuffers.Add(grabResult.hBuffer, convertedBuffer); } /* Add the image data. */ newGrabResultInternal.ImageData = new Image(grabResult.SizeX, grabResult.SizeY, convertedBuffer.Array, m_converterOutputFormatIsColor); } lock (m_lockObject) /* Lock the grab result queue to avoid that two threads modify the same data. */ { m_grabbedBuffers.Add(newGrabResultInternal); /* Add the new grab result to the queue. */ } }
protected bool m_triggered = true; /* Indicates that we wish to trigger single shots */ #endregion Fields #region Constructors /* Constructor with creation of basic objects. */ public ImageProvider() { /* Create a thread for image grabbing. */ m_grabThread = new Thread(Grab); /* Create objects used for buffer handling. */ m_lockObject = new Object(); m_buffers = new Dictionary<PYLON_STREAMBUFFER_HANDLE, PylonBuffer<Byte>>(); m_grabbedBuffers = new List<GrabResult>(); /* Create handles. */ m_hGrabber = new PYLON_STREAMGRABBER_HANDLE(); m_hDevice = new PYLON_DEVICE_HANDLE(); m_hRemovalCallback = new PYLON_DEVICECALLBACK_HANDLE(); m_hConverter = new PYLON_FORMAT_CONVERTER_HANDLE(); /* Create callback handler and attach the method. */ m_callbackHandler = new DeviceCallbackHandler(); m_callbackHandler.CallbackEvent += new DeviceCallbackHandler.DeviceCallback(RemovalCallbackHandler); }
/* Constructor with creation of basic objects. */ public ImageProvider() { /* Create a thread for image grabbing. */ m_grabThread = new Thread(Grab); /* Create objects used for buffer handling. */ m_lockObject = new Object(); m_buffers = new Dictionary <PYLON_STREAMBUFFER_HANDLE, PylonBuffer <Byte> >(); m_grabbedBuffers = new List <GrabResult>(); /* Create handles. */ m_hGrabber = new PYLON_STREAMGRABBER_HANDLE(); m_hDevice = new PYLON_DEVICE_HANDLE(); m_hRemovalCallback = new PYLON_DEVICECALLBACK_HANDLE(); m_hConverter = new PYLON_FORMAT_CONVERTER_HANDLE(); /* Create callback handler and attach the method. */ m_callbackHandler = new DeviceCallbackHandler(); m_callbackHandler.CallbackEvent += new DeviceCallbackHandler.DeviceCallback(RemovalCallbackHandler); }
protected void EnqueueTakenImage(PylonGrabResult_t grabResult) { PylonBuffer<Byte> buffer; /* Reference to the buffer attached to the grab result. */ /* Get the buffer from the dictionary. */ if (!m_buffers.TryGetValue(grabResult.hBuffer, out buffer)) { /* Oops. No buffer available? We should never have reached this point. Since all buffers are in the dictionary. */ throw new Exception("Failed to find the buffer associated with the handle returned in grab result."); } /* Create a new grab result to enqueue to the grabbed buffers list. */ GrabResult newGrabResultInternal = new GrabResult(); newGrabResultInternal.Handle = grabResult.hBuffer; /* Add the handle to requeue the buffer in the stream grabber queue. */ /* If already in output format add the image data. */ if (grabResult.PixelType == EPylonPixelType.PixelType_Mono8 || grabResult.PixelType == EPylonPixelType.PixelType_RGBA8packed) { newGrabResultInternal.ImageData = new Image(grabResult.SizeX, grabResult.SizeY, buffer.Array, grabResult.PixelType == EPylonPixelType.PixelType_RGBA8packed); } else /* Conversion is required. */ { /* Create a new format converter if needed. */ if (!m_hConverter.IsValid) { m_convertedBuffers = new Dictionary<PYLON_STREAMBUFFER_HANDLE,PylonBuffer<byte>>(); /* Create a new dictionary for the converted buffers. */ m_hConverter = Pylon.PixelFormatConverterCreate(m_hDevice, 1); /* Create the converter. */ m_converterOutputFormatIsColor = !Pylon.IsMono(grabResult.PixelType) || Pylon.IsBayer(grabResult.PixelType); } /* Reference to the buffer attached to the grab result handle. */ PylonBuffer<Byte> convertedBuffer = null; /* Look up if a buffer is already attached to the handle. */ bool bufferListed = m_convertedBuffers.TryGetValue(grabResult.hBuffer, out convertedBuffer); /* Perform the conversion. If the buffer is null a new one is automatically created. */ Pylon.PixelFormatConverterConvert(m_hConverter, ref convertedBuffer, buffer); if (!bufferListed) /* A new buffer has been created. Add it to the dictionary. */ { m_convertedBuffers.Add(grabResult.hBuffer, convertedBuffer); } /* Add the image data. */ newGrabResultInternal.ImageData = new Image(grabResult.SizeX, grabResult.SizeY, convertedBuffer.Array, m_converterOutputFormatIsColor); } lock (m_lockObject) /* Lock the grab result queue to avoid that two threads modify the same data. */ { m_grabbedBuffers.Add(newGrabResultInternal); /* Add the new grab result to the queue. */ } }