public override bool Open() { try { m_FrameListener = new pfnCameraGrabberFrameListener(CameraGrabberFrameListener); //图像镜像设置 MvApi.CameraSetMirror(m_hCamera, 0, 0); MvApi.CameraSetMirror(m_hCamera, 1, 0); MvApi.CameraGrabber_SetFrameListener(m_Grabber, m_FrameListener, IntPtr.Zero); ContinuousShotStop(); GetCameraSettingData(); MvApi.CameraGrabber_StartLive(m_Grabber); MvApi.CameraSetOutPutIOMode(m_hCamera, 0, (int)emCameraGPIOMode.IOMODE_GP_OUTPUT); MvApi.CameraSetIOState(m_hCamera, 0, 1); // Reset the stopwatch used to reduce the amount of displayed images. The camera may acquire images faster than the images can be displayed //stopWatch.Reset(); IsLink = true; } catch (Exception ex) { Util.WriteLog(this.GetType(), ex); Util.Notify("相机打开出现异常"); throw ex; } return(true); }
public override bool Open() { try { m_FrameListener = new pfnCameraGrabberFrameListener(CameraGrabberFrameListener); m_CameraConnectionStatusCallback = new CAMERA_CONNECTION_STATUS_CALLBACK(CameraConnectionStatusCallback); //图像镜像设置,第三个参数代表是否镜像。 //MvApi.CameraSetMirror(m_hCamera, 0, 1); //Collumn镜像 MvApi.CameraSetMirror(m_hCamera, 1, 1); //Row镜像 MvApi.CameraGrabber_SetFrameListener(m_Grabber, m_FrameListener, IntPtr.Zero); MvApi.CameraSetConnectionStatusCallback(m_hCamera, m_CameraConnectionStatusCallback, IntPtr.Zero); ContinuousShotStop(); GetCameraSettingData(); MvApi.CameraGrabber_StartLive(m_Grabber); MvApi.CameraSetOutPutIOMode(m_hCamera, 0, (int)emCameraGPIOMode.IOMODE_GP_OUTPUT); MvApi.CameraSetIOState(m_hCamera, 0, 1); // Reset the stopwatch used to reduce the amount of displayed images. The camera may acquire images faster than the images can be displayed //stopWatch.Reset(); IsLink = true; } catch (Exception ex) { Util.WriteLog(this.GetType(), ex); Util.Notify("相机打开出现异常"); return(false); throw ex; //不能随便屏蔽,否则上层接收不到异常,会接着执行函数下面原先不应该执行的部分。 } return(true); }
private void btn_CameraSwitch_Click(object sender, EventArgs e) { HDevWindowStack.Push(hv_WindowHandle); if (m_Grabber_1 != IntPtr.Zero || m_Grabber_2 != IntPtr.Zero) { if (CameraSwitch) { label_CameraNo.Text = "2"; if (m_Grabber_1 != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber_1); } if (m_Grabber_2 != IntPtr.Zero) { MvApi.CameraGrabber_StartLive(m_Grabber_2); } CameraSwitch = false; } else { label_CameraNo.Text = "1"; if (m_Grabber_2 != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber_2); } if (m_Grabber_1 != IntPtr.Zero) { MvApi.CameraGrabber_StartLive(m_Grabber_1); } CameraSwitch = true; } } }
private void btn_CameraOperator_Click(object sender, EventArgs e) { if (m_Grabber != IntPtr.Zero) { MvApi.CameraGrabber_StartLive(m_Grabber); } }
/// <summary> /// 打开两个相机 即初始化 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_OpenTwoCameras_Click(object sender, EventArgs e) { //初始化相机 InitCamera(); label_CameraNo.Text = "1"; if (m_Grabber_1 != IntPtr.Zero) { MvApi.CameraGrabber_StartLive(m_Grabber_1); } }
private void btn_TwoCameras_Find_Photos_Click(object sender, EventArgs e) { if (m_Grabber_1 != IntPtr.Zero || m_Grabber_2 != IntPtr.Zero) { HDevWindowStack.Push(hv_WindowHandle_1); HDevWindowStack.Push(hv_WindowHandle_2); MvApi.CameraGrabber_StartLive(m_Grabber_2); MvApi.CameraGrabber_StartLive(m_Grabber_1); } }
private void btn_CurrentCameraPhoto_Click(object sender, EventArgs e) { HDevWindowStack.Push(hv_WindowHandle); if (m_Grabber_1 != IntPtr.Zero || m_Grabber_2 != IntPtr.Zero) { if (label_CameraNo.Text == "2") { MvApi.CameraGrabber_StartLive(m_Grabber_2); } else { MvApi.CameraGrabber_StartLive(m_Grabber_1); } } }
public void CameraStart() { if (m_Grabber != IntPtr.Zero) { MvApi.CameraGrabber_StartLive(m_Grabber); } try { var ct = cts.Token; t1 = new Task(() => { ClearList(ct); }, ct); } catch (MyException ex) { MessageBox.Show("task" + ex.ToString()); } if (t1.Status == TaskStatus.Canceled) { t1.Start(); clearFlage = true; } }
public override void ContinuousShot() { if (m_Grabber == IntPtr.Zero) { return; } try { Command = Command.Video; MvApi.CameraSetTriggerMode(m_hCamera, (int)emSdkSnapMode.CONTINUATION); CameraSdkStatus suatus = MvApi.CameraGrabber_StartLive(m_Grabber); if (suatus != CameraSdkStatus.CAMERA_STATUS_SUCCESS) { Util.Notify("相机连续采集开始异常"); } IsContinuousShot = true; } catch (Exception ex) { Util.WriteLog(this.GetType(), ex); Util.Notify("相机连续采集开始异常"); } }
private bool InitCamera() { CameraSdkStatus status = 0; tSdkCameraDevInfo[] DevList; MvApi.CameraEnumerateDevice(out DevList); int NumDev = (DevList != null ? DevList.Length : 0); if (NumDev < 1) { System.Windows.MessageBox.Show("未扫描到相机"); return(false); } else if (NumDev == 1) { status = MvApi.CameraGrabber_Create(out m_Grabber, ref DevList[0]); } else { status = MvApi.CameraGrabber_CreateFromDevicePage(out m_Grabber); } if (status == 0) { MvApi.CameraGrabber_GetCameraDevInfo(m_Grabber, out m_DevInfo); MvApi.CameraGrabber_GetCameraHandle(m_Grabber, out m_hCamera); var handle = (new WindowInteropHelper(window)).Handle; MvApi.CameraCreateSettingPage(m_hCamera, handle, m_DevInfo.acFriendlyName, null, (IntPtr)0, 0); MvApi.CameraGrabber_SetRGBCallback(m_Grabber, m_FrameCallback, IntPtr.Zero); // 黑白相机设置ISP输出灰度图像 // 彩色相机ISP默认会输出BGR24图像 tSdkCameraCapbility cap; MvApi.CameraGetCapability(m_hCamera, out cap); if (cap.sIspCapacity.bMonoSensor != 0) { MvApi.CameraSetIspOutFormat(m_hCamera, (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_MONO8); // 创建灰度调色板 Bitmap Image = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format8bppIndexed); m_GrayPal = Image.Palette; for (int Y = 0; Y < m_GrayPal.Entries.Length; Y++) { m_GrayPal.Entries[Y] = System.Drawing.Color.FromArgb(255, Y, Y, Y); } } // 设置VFlip,由于SDK输出的数据默认是从底到顶的,打开VFlip后就可以直接转换为Bitmap MvApi.CameraSetMirror(m_hCamera, 1, 1); // 设置相机预设分辨率 tSdkImageResolution t; MvApi.CameraGetImageResolution(m_hCamera, out t); t.iIndex = 8;//切换预设分辨率, 只需要设定index值就行了。640*480 mono bin MvApi.CameraSetImageResolution(m_hCamera, ref t); // 为了演示如何在回调中使用相机数据创建Bitmap并显示到PictureBox中,这里不使用SDK内置的绘制操作 //MvApi.CameraGrabber_SetHWnd(m_Grabber, this.DispWnd.Handle); MvApi.CameraGrabber_StartLive(m_Grabber); return(true); } else { System.Windows.MessageBox.Show(String.Format("打开相机失败,原因:{0}", status)); } return(false); }