Ejemplo n.º 1
0
        /// <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
        }
Ejemplo n.º 2
0
 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();
     }
 }