public void CaptureThreadProc() { CameraSdkStatus eStatus; tSdkFrameHead FrameHead; uint uRawBuffer;//rawbuffer由SDK内部申请。应用层不要调用delete之类的释放函数 while (m_bExitCaptureThread == false) { //500毫秒超时,图像没捕获到前,线程会被挂起,释放CPU,所以该线程中无需调用sleep eStatus = MvApi.CameraGetImageBuffer(m_hCamera, out FrameHead, out uRawBuffer, 500); if (eStatus == CameraSdkStatus.CAMERA_STATUS_SUCCESS)//如果是触发模式,则有可能超时 { //图像处理,将原始输出转换为RGB格式的位图数据,同时叠加白平衡、饱和度、LUT等ISP处理。 MvApi.CameraImageProcess(m_hCamera, uRawBuffer, m_ImageBuffer, ref FrameHead); //叠加十字线、自动曝光窗口、白平衡窗口信息(仅叠加设置为可见状态的)。 MvApi.CameraImageOverlay(m_hCamera, m_ImageBuffer, ref FrameHead); //调用SDK封装好的接口,显示预览图像 MvApi.CameraDisplayRGB24(m_hCamera, m_ImageBuffer, ref FrameHead); //成功调用CameraGetImageBuffer后必须释放,下次才能继续调用CameraGetImageBuffer捕获图像。 MvApi.CameraReleaseImageBuffer(m_hCamera, uRawBuffer); if (FrameHead.iWidth != m_tFrameHead.iWidth || FrameHead.iHeight != m_tFrameHead.iHeight) { m_bEraseBk = true; m_tFrameHead = FrameHead; } m_iDisplayedFrames++; } } }
public void ImageCaptureCallback(CameraHandle hCamera, IntPtr pFrameBuffer, ref tSdkFrameHead pFrameHead, IntPtr pContext) { //图像处理,将原始输出转换为RGB格式的位图数据,同时叠加白平衡、饱和度、LUT等ISP处理。 MvApi.CameraImageProcess(hCamera, pFrameBuffer, m_ImageBuffer, ref pFrameHead); //叠加十字线、自动曝光窗口、白平衡窗口信息(仅叠加设置为可见状态的)。 MvApi.CameraImageOverlay(hCamera, m_ImageBuffer, ref pFrameHead); //调用SDK封装好的接口,显示预览图像 MvApi.CameraDisplayRGB24(hCamera, m_ImageBuffer, ref pFrameHead); m_tFrameHead = pFrameHead; m_iDisplayedFrames++; if (pFrameHead.iWidth != m_tFrameHead.iWidth || pFrameHead.iHeight != m_tFrameHead.iHeight) { timer2.Enabled = true; timer2.Start(); m_tFrameHead = pFrameHead; } }
public void CaptureThreadProc() { CameraSdkStatus eStatus; tSdkFrameHead FrameHead; IntPtr uRawBuffer;//rawbuffer由SDK内部申请。应用层不要调用delete之类的释放函数 while (m_bExitCaptureThread == false) { //500毫秒超时,图像没捕获到前,线程会被挂起,释放CPU,所以该线程中无需调用sleep eStatus = MvApi.CameraGetImageBuffer(m_hCamera, out FrameHead, out uRawBuffer, 500); if (eStatus == CameraSdkStatus.CAMERA_STATUS_SUCCESS)//如果是触发模式,则有可能超时 { //图像处理,将原始输出转换为RGB格式的位图数据,同时叠加白平衡、饱和度、LUT等ISP处理。 MvApi.CameraImageProcess(m_hCamera, uRawBuffer, m_ImageBuffer, ref FrameHead); //叠加十字线、自动曝光窗口、白平衡窗口信息(仅叠加设置为可见状态的)。 MvApi.CameraImageOverlay(m_hCamera, m_ImageBuffer, ref FrameHead); //调用SDK封装好的接口,显示预览图像 MvApi.CameraDisplayRGB24(m_hCamera, m_ImageBuffer, ref FrameHead); //成功调用CameraGetImageBuffer后必须释放,下次才能继续调用CameraGetImageBuffer捕获图像。 MvApi.CameraReleaseImageBuffer(m_hCamera, uRawBuffer); if (FrameHead.iWidth != m_tFrameHead.iWidth || FrameHead.iHeight != m_tFrameHead.iHeight) { m_bEraseBk = true; m_tFrameHead = FrameHead; } m_iDisplayedFrames++; if (m_bSaveImage) { string file_path; file_path = "c:\\test.bmp"; byte[] file_path_bytes = Encoding.Default.GetBytes(file_path); MvApi.CameraSaveImage(m_hCamera, file_path_bytes, m_ImageBuffer, ref FrameHead, emSdkFileType.FILE_BMP, 100); m_bSaveImage = false; } } } }