Пример #1
0
 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);
        }
Пример #3
0
        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;
                }
            }
        }
Пример #4
0
 private void btn_CameraOperator_Click(object sender, EventArgs e)
 {
     if (m_Grabber != IntPtr.Zero)
     {
         MvApi.CameraGrabber_StartLive(m_Grabber);
     }
 }
Пример #5
0
 /// <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);
     }
 }
Пример #6
0
        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);
            }
        }
Пример #7
0
 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);
         }
     }
 }
Пример #8
0
 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;
     }
 }
Пример #9
0
 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("相机连续采集开始异常");
     }
 }
Пример #10
0
        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);
        }