/// <summary> /// 图像采集到事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void StreamGrabber_ImageGrabbed(object objUserParam, IFrameData objIFrameData) { try { if (HoImage != null && HoImage.IsInitialized()) { HoImage.Dispose(); HoImage = null; //System.Threading.Thread.Sleep(10); //System.GC.Collect(); //System.GC.WaitForPendingFinalizers(); IsImageGrabbed = false; } int width = (int)objIFrameData.GetWidth(); int height = (int)objIFrameData.GetHeight(); #region 相机SDK内部像素格式转换 IntPtr pBuffer; GX_VALID_BIT_LIST emValidBits = __GetBestValudBit(objIFrameData.GetPixelFormat()); if (_IsColorMode) {//彩色 //不需要释放指针空间 pBuffer = objIFrameData.ConvertToRGB24(emValidBits , GX_BAYER_CONVERT_TYPE_LIST.GX_RAW2RGB_NEIGHBOUR, false); HOperatorSet.GenImageInterleaved(out HoImage, new HTuple(pBuffer), "bgr", width, height, new HTuple(-1), "byte", width, height, 0, 0, -1, 0); } else {//黑白 if (__IsPixelFormat8(objIFrameData.GetPixelFormat())) { pBuffer = objIFrameData.GetBuffer(); } else { //不需要释放指针空间 pBuffer = objIFrameData.ConvertToRaw8(emValidBits); } HOperatorSet.GenImage1(out HoImage, "byte", width, height, new HTuple(pBuffer)); } if (HoImage != null && HoImage.IsInitialized()) { IsImageGrabbed = true; if (CameraImageGrabbedEvt != null) { CameraImageGrabbedEvt(Camera, HoImage); } } } catch (Exception ex) { } finally { } #endregion }
private void DeviceStreamGrabber_ImageGrabbedEvent(object sender, ImageGrabbedEventArgs e) { Basler.Pylon.IGrabResult grabResult = e.GrabResult; if (grabResult.GrabSucceeded) { Basler.Pylon.PixelType pixelType = grabResult.PixelTypeValue; if (pixelType == Basler.Pylon.PixelType.Mono8) { //allocate the m_stream_size amount of bytes in non-managed environment if (_latestFrameAddress == IntPtr.Zero) { _latestFrameAddress = System.Runtime.InteropServices.Marshal.AllocHGlobal((Int32)grabResult.PayloadSize); } _converter.OutputPixelFormat = Basler.Pylon.PixelType.Mono8; _converter.Convert(_latestFrameAddress, grabResult.PayloadSize, grabResult); HalconDotNet.HOperatorSet.GenImage1(out HoImage, "byte", (HalconDotNet.HTuple)grabResult.Width, (HalconDotNet.HTuple)grabResult.Height, (HalconDotNet.HTuple)_latestFrameAddress); } else if (grabResult.PixelTypeValue == Basler.Pylon.PixelType.BayerBG8 || grabResult.PixelTypeValue == Basler.Pylon.PixelType.BayerGB8 || grabResult.PixelTypeValue == Basler.Pylon.PixelType.BayerRG8 || grabResult.PixelTypeValue == Basler.Pylon.PixelType.BayerGR8 || grabResult.PixelTypeValue == Basler.Pylon.PixelType.BayerRG12Packed || grabResult.PixelTypeValue == Basler.Pylon.PixelType.YUV422packed || grabResult.PixelTypeValue == Basler.Pylon.PixelType.YUV422_YUYV_Packed || grabResult.PixelTypeValue == Basler.Pylon.PixelType.BayerRG12 ) { if (_latestFrameAddress == IntPtr.Zero) { _latestFrameAddress = System.Runtime.InteropServices.Marshal.AllocHGlobal((Int32)(3 * grabResult.Width * grabResult.Height)); } _converter.OutputPixelFormat = Basler.Pylon.PixelType.BGR8packed;// 根据bayer格式不同切换以下代码 _converter.Convert(_latestFrameAddress, 3 * grabResult.Width * grabResult.Height, grabResult); HalconDotNet.HOperatorSet.GenImageInterleaved(out HoImage, _latestFrameAddress, "bgr", (HalconDotNet.HTuple)_imageWidth, (HalconDotNet.HTuple)_imageHeight, -1, "byte", (HalconDotNet.HTuple)_imageWidth, (HalconDotNet.HTuple)_imageHeight, 0, 0, -1, 0); } System.Runtime.InteropServices.Marshal.FreeHGlobal(_latestFrameAddress); _latestFrameAddress = IntPtr.Zero; if (HoImage != null && HoImage.IsInitialized()) { IsImageGrabbed = true; if (CameraImageGrabbedEvt != null) { CameraImageGrabbedEvt(Camera, HoImage); } } } }
/// <summary> /// 迈德威视相机采集到图像回调处理函数 /// </summary> /// <param name="Grabber"></param> /// <param name="pFrameBuffer"></param> /// <param name="pFrameHead"></param> /// <param name="Context"></param> private void OnSDKImageGrabbed(IntPtr Grabber, IntPtr pFrameBuffer, ref tSdkFrameHead pFrameHead, IntPtr Context) { if (HoImage != null && HoImage.IsInitialized()) { HoImage = null; //System.Threading.Thread.Sleep(1); //GC.Collect(); //GC.WaitForPendingFinalizers(); IsImageGrabbed = false; } #region 迈德威视相机SDK内部像素格式转换 // 由于黑白相机在相机打开后设置了ISP输出灰度图像 // 因此此处pFrameBuffer=8位灰度数据 // 否则会和彩色相机一样输出BGR24数据 // 彩色相机ISP默认会输出BGR24图像 // pFrameBuffer=BGR24数据 int w = pFrameHead.iWidth; int h = pFrameHead.iHeight; if (pFrameHead.uiMediaType == (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_MONO8) { HalconDotNet.HOperatorSet.GenImage1(out HoImage, "byte", w, h, pFrameBuffer); } else if (pFrameHead.uiMediaType == (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_BGR8) { HalconDotNet.HOperatorSet.GenImageInterleaved(out HoImage, pFrameBuffer, "bgr", w, h, -1, "byte", w, h, 0, 0, -1, 0); } MvApi.CameraClearBuffer(_deviceRef); #endregion if (HoImage != null && HoImage.IsInitialized()) { System.Threading.Thread.Sleep(1); IsImageGrabbed = true; if (CameraImageGrabbedEvt != null) { CameraImageGrabbedEvt(Camera, HoImage); } } }
/// <summary> /// 图像采集到事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void StreamGrabber_ImageGrabbed(object sender, ThridLibray.GrabbedEventArgs e) { if (HoImage != null && HoImage.IsInitialized()) { HoImage.Dispose(); System.Threading.Thread.Sleep(10); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); IsImageGrabbed = false; } #region 大华相机SDK内部像素格式转换 ThridLibray.IGrabbedRawData frame = e.GrabResult.Clone(); if (frame != null) { System.Drawing.Bitmap btmp = null; if (frame.PixelFmt == ThridLibray.GvspPixelFormatType.gvspPixelMono8 || frame.PixelFmt == ThridLibray.GvspPixelFormatType.gvspPixelMono10) { btmp = frame.ToBitmap(false); } else if (frame.PixelFmt == ThridLibray.GvspPixelFormatType.gvspPixelRGB8 || frame.PixelFmt == ThridLibray.GvspPixelFormatType.gvspPixelRGB10) { btmp = frame.ToBitmap(true); } if (btmp != null) { BitmapToHObject(btmp, out HoImage); btmp.Dispose(); } } #endregion if (HoImage != null && HoImage.IsInitialized()) { IsImageGrabbed = true; if (CameraImageGrabbedEvt != null) { CameraImageGrabbedEvt(CameraProperty, HoImage); } } }
void OnImgDataOut() { if (HoImage != null && HoImage.IsInitialized()) { HoImage.Dispose(); } HoImage = _imgData.Clone(); if (HoImage != null && HoImage.IsInitialized()) { System.Threading.Thread.Sleep(10); if (CameraImageGrabbedEvt != null) { CameraImageGrabbedEvt(CameraProperty, HoImage); } } }