private void Form1_Load(object sender, EventArgs e) { //1打开窗口、赋值线程状态 //2枚举设备 //3.初始化设备 //3.申请内存 获取特性 获取位数 //4.设置触发模式 //5.开启绑定线程 //6开始采集 //6开始采集(默认连续,不设置采集模式的话) Control.CheckForIllegalCrossThreadCalls = false; HOperatorSet.OpenWindow(0, 0, pictureBox1.Width, pictureBox1.Height, pictureBox1.Handle, "", "", out hv_WindowHandle); HDevWindowStack.Push(hv_WindowHandle); status = MvApi.CameraEnumerateDevice(out tCameraDevInfoList); //枚举设备 if (tCameraDevInfoList != null)//此时iCameraCounts返回了实际连接的相机个数。如果大于1,则初始化第一个相机 { status = MvApi.CameraInit(ref tCameraDevInfoList[0], -1, -1, ref m_hCamera); //初始化第一个相机 //获得相机特性描述 MvApi.CameraGetCapability(m_hCamera, out tCameraCapability); //申请内存 m_ImageBuffer = Marshal.AllocHGlobal(tCameraCapability.sResolutionRange.iWidthMax * tCameraCapability.sResolutionRange.iHeightMax * 3 + 1024); //MvApi.CameraSetTriggerMode(m_hCamera, 0); m_bExitCaptureThread = false; m_tCaptureThread = new Thread(new ThreadStart(CaptureThreadProc)); m_tCaptureThread.Start(); MvApi.CameraPlay(m_hCamera); } }
public Default() { InitializeComponent(); if (InitCamera() == true) { MvApi.CameraPlay(m_hCamera); BtnPlay.Text = "Pause"; } }
public BasicForm() { InitializeComponent(); //初始化SDK MvApi.CameraSdkInit(1);//1:SDK中使用中文进行提示和创建相机配置窗口 0:英文 // 检测是否有连接相机,如果已经连接,则直接初始化相机并开始预览 if (InitCamera() == true) { MvApi.CameraPlay(m_hCamera); } }
private void BtnPlay_Click(object sender, EventArgs e) { if (m_hCamera < 1)//还未初始化相机 { if (InitCamera() == true) { MvApi.CameraPlay(m_hCamera); } } else//已经初始化 { MvApi.CameraPlay(m_hCamera); } }
public frmIndustrialCamera() { InitializeComponent(); this.FormClosed += new FormClosedEventHandler(frmIndustrialCamera_FormClosed); //初始化SDK MvApi.CameraSdkInit(1);//1:SDK中使用中文进行提示和创建相机配置窗口 0:英文 // 检测是否有连接相机,如果已经连接,则直接初始化相机并开始预览 if (InitCamera() == true) { MvApi.CameraPlay(m_hCamera); //BtnPlay.Text = "暂停"; } }
private void BtnPlay2_Click(object sender, EventArgs e) { if (CameraObj2.m_hCamera > 0) { if (BtnPlay2.Text == "Play") { MvApi.CameraPlay(CameraObj2.m_hCamera); BtnPlay2.Text = "Pause"; } else { MvApi.CameraPause(CameraObj2.m_hCamera); BtnPlay2.Text = "Play"; } } }
private void BtnPlay_Click(object sender, EventArgs e) { if (m_hCamera1 != 0) { if (BtnPlay.Text == "Play") { MvApi.CameraPlay(m_hCamera1); BtnPlay.Text = "Pause"; } else { MvApi.CameraPause(m_hCamera1); BtnPlay.Text = "Play"; } } }
/// <summary> /// 根据设备列表,初始化单个相机 /// </summary> /// <param name="tCameraDevInfoList">相机设备列表</param> /// <param name="cameraDevID">第i个相机</param> /// <param name="PreviewBox">相机对应的PictureBox</param> /// <param name="CaptureThreadProc1">相机对应的线程处理函数</param> /// <param name="cameraObj">相机对象</param> /// <returns></returns> protected bool InitSingleCamera(tSdkCameraDevInfo[] tCameraDevInfoList, int cameraDevID, ThreadStart CaptureThreadProc1, PictureBox PreviewBox, Button BtnPlay, Label StateLabel, string errMsg, ref tpvCameraObj cameraObj) { if (MvApi.CameraInit(ref tCameraDevInfoList[cameraDevID], -1, -1, ref cameraObj.m_hCamera) == CameraSdkStatus.CAMERA_STATUS_SUCCESS) { //获得相机特性描述 MvApi.CameraGetCapability(cameraObj.m_hCamera, out cameraObj.tCameraCapability); cameraObj.m_ImageBuffer = Marshal.AllocHGlobal(cameraObj.tCameraCapability.sResolutionRange.iWidthMax * cameraObj.tCameraCapability.sResolutionRange.iHeightMax * 3 + 1024); //初始化显示模块,使用SDK内部封装好的显示接口 MvApi.CameraDisplayInit(cameraObj.m_hCamera, PreviewBox.Handle); MvApi.CameraSetDisplaySize(cameraObj.m_hCamera, PreviewBox.Width, PreviewBox.Height); //让SDK来根据相机的型号动态创建该相机的配置窗口。 MvApi.CameraCreateSettingPage(cameraObj.m_hCamera, this.Handle, tCameraDevInfoList[cameraDevID].acFriendlyName, /*SettingPageMsgCalBack*/ null, /*m_iSettingPageMsgCallbackCtx*/ (IntPtr)null, 0); MvApi.CameraPlay(cameraObj.m_hCamera); BtnPlay.Text = "Pause"; //两种方式来获得预览图像,设置回调函数或者使用定时器或者独立线程的方式, //主动调用CameraGetImageBuffer接口来抓图。 //本例中仅演示了两种的方式,注意,两种方式也可以同时使用,但是在回调函数中, //不要使用CameraGetImageBuffer,否则会造成死锁现象。 cameraObj.m_bExitCaptureThread = false; cameraObj.m_tCaptureThread = new Thread(new ThreadStart(CaptureThreadProc1)); cameraObj.m_tCaptureThread.Start(); } else { cameraObj.m_hCamera = 0; //StateLabel.Text = "Camera 1 init error"; StateLabel.Text = errMsg; return(false); } return(true); }
private void Form1_Load(object sender, EventArgs e) { //1打开窗口 //2枚举设备 //3初始化设备 //4.获得位数,申请内存 //5绑定回调事件 并在回调事件中加入halcon显示代码 //6开始采集(默认连续,不设置采集模式的话) HOperatorSet.OpenWindow(0, 0, pictureBox1.Width, pictureBox1.Height, pictureBox1.Handle, "", "", out hv_WindowHandle); HDevWindowStack.Push(hv_WindowHandle); status = MvApi.CameraEnumerateDevice(out tCameraDevInfoList); if (tCameraDevInfoList != null)//此时iCameraCounts返回了实际连接的相机个数。如果大于1,则初始化第一个相机 { status = MvApi.CameraInit(ref tCameraDevInfoList[0], -1, -1, ref m_hCamera); } MvApi.CameraGetCapability(m_hCamera, out tCameraCapability); m_ImageBuffer = Marshal.AllocHGlobal(tCameraCapability.sResolutionRange.iWidthMax * tCameraCapability.sResolutionRange.iHeightMax * 3 + 1024); m_CaptureCallback = new CAMERA_SNAP_PROC(ImageCaptureCallback); MvApi.CameraSetCallbackFunction(m_hCamera, m_CaptureCallback, m_iCaptureCallbackCtx, ref pCaptureCallOld); MvApi.CameraPlay(m_hCamera); }
private void BtnPlay_Click(object sender, EventArgs e) { if (m_hCamera < 1)//还未初始化相机 { if (InitCamera() == true) { MvApi.CameraPlay(m_hCamera); BtnPlay.Text = "Pause"; } } else//已经初始化 { if (BtnPlay.Text == "Play") { MvApi.CameraPlay(m_hCamera); BtnPlay.Text = "Pause"; } else { MvApi.CameraPause(m_hCamera); BtnPlay.Text = "Play"; } } }
private bool InitCamera() { CameraSdkStatus status; tSdkCameraDevInfo[] tCameraDevInfoList; status = MvApi.CameraEnumerateDevice(out tCameraDevInfoList); int iCameraCounts = (tCameraDevInfoList != null ? tCameraDevInfoList.Length : 0); if (iCameraCounts >= 2)//此时iCameraCounts返回了实际连接的相机个数。如果大于2,则初始化前2个相机 { if (MvApi.CameraInit(ref tCameraDevInfoList[0], -1, -1, ref m_hCamera1) == CameraSdkStatus.CAMERA_STATUS_SUCCESS) { //获得相机特性描述 MvApi.CameraGetCapability(m_hCamera1, out tCameraCapability1); m_ImageBuffer1 = Marshal.AllocHGlobal(tCameraCapability1.sResolutionRange.iWidthMax * tCameraCapability1.sResolutionRange.iHeightMax * 3 + 1024); //初始化显示模块,使用SDK内部封装好的显示接口 MvApi.CameraDisplayInit(m_hCamera1, PreviewBox.Handle); MvApi.CameraSetDisplaySize(m_hCamera1, PreviewBox.Width, PreviewBox.Height); //让SDK来根据相机的型号动态创建该相机的配置窗口。 MvApi.CameraCreateSettingPage(m_hCamera1, this.Handle, tCameraDevInfoList[0].acFriendlyName, /*SettingPageMsgCalBack*/ null, /*m_iSettingPageMsgCallbackCtx*/ (IntPtr)null, 0); MvApi.CameraPlay(m_hCamera1); BtnPlay.Text = "Pause"; //两种方式来获得预览图像,设置回调函数或者使用定时器或者独立线程的方式, //主动调用CameraGetImageBuffer接口来抓图。 //本例中仅演示了两种的方式,注意,两种方式也可以同时使用,但是在回调函数中, //不要使用CameraGetImageBuffer,否则会造成死锁现象。 m_bExitCaptureThread1 = false; m_tCaptureThread1 = new Thread(new ThreadStart(CaptureThreadProc1)); m_tCaptureThread1.Start(); } else { m_hCamera1 = 0; StateLabel.Text = "Camera 1 init error"; return(false); } if (MvApi.CameraInit(ref tCameraDevInfoList[1], -1, -1, ref m_hCamera2) == CameraSdkStatus.CAMERA_STATUS_SUCCESS) { //获得相机特性描述 MvApi.CameraGetCapability(m_hCamera2, out tCameraCapability2); m_ImageBuffer2 = Marshal.AllocHGlobal(tCameraCapability2.sResolutionRange.iWidthMax * tCameraCapability2.sResolutionRange.iHeightMax * 3 + 1024); //初始化显示模块,使用SDK内部封装好的显示接口 MvApi.CameraDisplayInit(m_hCamera2, PreviewBox2.Handle); MvApi.CameraSetDisplaySize(m_hCamera2, PreviewBox2.Width, PreviewBox2.Height); //让SDK来根据相机的型号动态创建该相机的配置窗口。 MvApi.CameraCreateSettingPage(m_hCamera2, this.Handle, tCameraDevInfoList[1].acFriendlyName, /*SettingPageMsgCalBack*/ null, /*m_iSettingPageMsgCallbackCtx*/ (IntPtr)null, 0); MvApi.CameraPlay(m_hCamera2); BtnPlay2.Text = "Pause"; m_bExitCaptureThread2 = false; m_tCaptureThread2 = new Thread(new ThreadStart(CaptureThreadProc2)); m_tCaptureThread2.Start(); } else { m_hCamera2 = 0; StateLabel.Text = "Camera 2 init error"; return(false); } return(true); } return(false); }