/// <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); } } }