private unsafe void camera_EventFrame(object sender, EventArgs e) { uEye.Camera camera = sender as uEye.Camera; if (camera == null || !camera.IsOpened) { return; } uEye.Defines.DisplayMode mode; camera.Display.Mode.Get(out mode); if (mode != uEye.Defines.DisplayMode.DiB) { return; } int memId; camera.Memory.GetActive(out memId); camera.Memory.Lock(memId); System.IntPtr ptrSrc; camera.Memory.ToIntPtr(memId, out ptrSrc); fixed(byte *p = incomingBuffer) { IntPtr ptrDst = (IntPtr)p; camera.Memory.CopyImageMem(ptrSrc, memId, ptrDst); } if (finishline.Enabled) { bool flush = finishline.Consolidate(incomingBuffer); if (flush) { ComputeDataRate(finishline.BufferOutput.Length); if (FrameProduced != null) { FrameProduced(this, new FrameProducedEventArgs(finishline.BufferOutput, finishline.BufferOutput.Length)); } } } else { ComputeDataRate(incomingBufferSize); if (FrameProduced != null) { FrameProduced(this, new FrameProducedEventArgs(incomingBuffer, incomingBufferSize)); } } camera.Memory.Unlock(memId); }
//private void imageProvider_GrabbingStartedEvent() //{ // grabbing = true; // if (GrabbingStatusChanged != null) // GrabbingStatusChanged(this, EventArgs.Empty); //} private void BaumerProvider_BufferProduced(object sender, BufferEventArgs e) { BGAPI2.Buffer buffer = e.Buffer; if (buffer == null || buffer.IsIncomplete || buffer.MemPtr == IntPtr.Zero) { return; } int payloadLength = (int)buffer.SizeFilled; // Wrap the buffer in an image, convert if needed. BGAPI2.Image image = imgProcessor.CreateImage((uint)buffer.Width, (uint)buffer.Height, buffer.PixelFormat, buffer.MemPtr, buffer.MemSize); bool ready = imageFormat == ImageFormat.JPEG || (imageFormat == ImageFormat.Y800 && BaumerHelper.IsY800(image.PixelFormat)); if (!ready) { // Color conversion is required. BGAPI2.Image transformedImage = GetTransformedImage(image); image.Release(); image = transformedImage; int bpp = BaumerHelper.IsY800(image.PixelFormat) ? 1 : 3; payloadLength = (int)(image.Width * image.Height * bpp); } CopyFrame(image, payloadLength); image.Release(); if (imageFormat != ImageFormat.JPEG && finishline.Enabled) { bool flush = finishline.Consolidate(frameBuffer); if (flush) { ComputeDataRate(finishline.BufferOutput.Length); if (FrameProduced != null) { FrameProduced(this, new FrameProducedEventArgs(finishline.BufferOutput, finishline.BufferOutput.Length)); } } } else { ComputeDataRate(payloadLength); if (FrameProduced != null) { FrameProduced(this, new FrameProducedEventArgs(frameBuffer, payloadLength)); } } }
private void imageProvider_ImageReadyEvent() { // Consume the Pylon queue (no copy). ImageProvider.Image pylonImage = imageProvider.GetLatestImage(); if (pylonImage == null) { return; } if (finishline.Enabled) { bool flush = finishline.Consolidate(pylonImage.Buffer); imageProvider.ReleaseImage(); if (flush) { ComputeDataRate(finishline.BufferOutput.Length); if (FrameProduced != null) { FrameProduced(this, new FrameProducedEventArgs(finishline.BufferOutput, finishline.BufferOutput.Length)); } } } else { ComputeDataRate(pylonImage.Buffer.Length); if (FrameProduced != null) { FrameProduced(this, new FrameProducedEventArgs(pylonImage.Buffer, pylonImage.Buffer.Length)); } imageProvider.ReleaseImage(); } }