Example #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
        }
Example #2
0
        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);
                    }
                }
            }
        }
Example #3
0
        /// <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);
                }
            }
        }
Example #4
0
        /// <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);
                }
            }
        }
Example #5
0
        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);
                }
            }
        }