示例#1
0
        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);
            }
        }
示例#2
0
 public Default()
 {
     InitializeComponent();
     if (InitCamera() == true)
     {
         MvApi.CameraPlay(m_hCamera);
         BtnPlay.Text = "Pause";
     }
 }
示例#3
0
        public BasicForm()
        {
            InitializeComponent();

            //初始化SDK
            MvApi.CameraSdkInit(1);//1:SDK中使用中文进行提示和创建相机配置窗口  0:英文
            // 检测是否有连接相机,如果已经连接,则直接初始化相机并开始预览
            if (InitCamera() == true)
            {
                MvApi.CameraPlay(m_hCamera);
            }
        }
示例#4
0
 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 = "暂停";
            }
        }
示例#6
0
 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";
         }
     }
 }
示例#8
0
        /// <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);
        }
示例#9
0
        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);
        }
示例#10
0
 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);
        }