/// <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 }
public void OnFrameCallbackFun(object obj, IFrameData objIFrameData) { if (objIFrameData.GetStatus() == GxIAPINET.GX_FRAME_STATUS_LIST.GX_FRAME_STATUS_SUCCESS) { Mat img = null; IntPtr pRGB24Buffer = IntPtr.Zero; int size = (int)objIFrameData.GetHeight() * (int)objIFrameData.GetWidth() * 3; byte[] imgdata = new byte[size]; pRGB24Buffer = objIFrameData.ConvertToRGB24(GxIAPINET.GX_VALID_BIT_LIST.GX_BIT_0_7, GxIAPINET.GX_BAYER_CONVERT_TYPE_LIST.GX_RAW2RGB_NEIGHBOUR, true); Marshal.Copy(pRGB24Buffer, imgdata, 0, imgdata.Length); img = new Mat((int)objIFrameData.GetHeight(), (int)objIFrameData.GetWidth(), MatType.CV_8UC3, imgdata); Cv2.Flip(img, img, 0); camera_img = img; objIGXFeatureControl.GetCommandFeature("AcquisitionStop").Execute(); objIGXStream.FlushQueue(); } }