Пример #1
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);
                }
            }
        }