Example #1
0
 private void btn_CameraOperator_Click(object sender, EventArgs e)
 {
     if (m_Grabber != IntPtr.Zero)
     {
         MvApi.CameraGrabber_StartLive(m_Grabber);
     }
 }
Example #2
0
 private void btn_GrabPhoto_Click(object sender, EventArgs e)
 {
     if (m_Grabber != IntPtr.Zero)
     {
         MvApi.CameraGrabber_StopLive(m_Grabber);
     }
 }
Example #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;
                }
            }
        }
Example #4
0
        public override void SetExtTrigger()
        {
            try
            {
                CameraSdkStatus st = MvApi.CameraSetExtTrigSignalType(m_hCamera, 1);//下降沿触发
                st = MvApi.CameraSetTriggerMode(m_hCamera, (int)emSdkSnapMode.EXTERNAL_TRIGGER);


                st = MvApi.CameraSetTriggerDelayTime(m_hCamera, (uint)triggerDelayAbs);

                //m_pOperator.SetEnumValue("ExposureAuto", 0);

                //m_pOperator.SetFloatValue("TriggerDelay", (float)triggerDelayAbs);

                st = MvApi.CameraSetExtTrigJitterTime(m_hCamera, (uint)LineDebouncerTimeAbs);
                //m_pOperator.SetIntValue("LineDebouncerTime", (uint)LineDebouncerTimeAbs);
                Command      = Command.ExtTrigger;
                IsExtTrigger = true;
            }
            catch (Exception ex)
            {
                Util.WriteLog(this.GetType(), ex);
                Util.Notify("相机外触发设置异常");
            }
        }
Example #5
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);
 }
Example #6
0
        private void checkOnlineTimer_Tick(object sender, EventArgs e)
        {
            HTuple          newHandle = hv_AcqHandle.H.TupleIsValidHandle();
            CameraSdkStatus status    = MvApi.CameraConnectTest(newHandle);

            if (status != 0)
            {
                HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "trigger_mode", 1);
                camStatus.Text      = "相机已掉线 正在重连中...";
                camStatus.ForeColor = Color.Red;
                button2.Text        = "开启";
                modelList.Enabled   = true;
                btnAddModel.Enabled = false;
                button2.Enabled     = false;
                MvApi.CameraReConnect(newHandle);
            }
            else
            {
                camStatus.Text      = "上线";
                camStatus.ForeColor = Color.Green;
                button2.Enabled     = true;
                if (button2.Text == "开启")
                {
                    btnAddModel.Enabled = 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);
        }
Example #8
0
 public void UpdateImage(ref tSdkFrameHead tFrameHead, IntPtr pRgbBuffer)
 {
     SnapshotBox.Width  = tFrameHead.iWidth;
     SnapshotBox.Height = tFrameHead.iHeight;
     SnapshotBox.Image  = MvApi.CSharpImageFromFrame(pRgbBuffer, ref tFrameHead);
     panel1.AutoScroll  = true;
 }
Example #9
0
 public override void ContinuousShotStop()
 {
     try
     {
         // Set an enum parameter.
         if (m_Grabber == IntPtr.Zero)
         {
             return;
         }
         CameraSdkStatus status;
         CameraSdkStatus st = MvApi.CameraSetExtTrigSignalType(m_hCamera, 1);//上升沿触发
         status           = MvApi.CameraSetTriggerMode(m_hCamera, (int)emSdkSnapMode.SOFT_TRIGGER);
         IsContinuousShot = false;
         IsExtTrigger     = false;
         Task.Run(() =>
         {
             ignoreImage = true;
             Thread.Sleep(1000);
             ignoreImage = false;
         });
     }
     catch (Exception ex)
     {
         Util.WriteLog(this.GetType(), ex);
         Util.Notify("相机连续采集停止异常");
     }
 }
Example #10
0
        public bool InitCamera()
        {
            const int MAX_CAMS = 2;

            tSdkCameraDevInfo[] sCameraList = null;
            int iCameraNums = MAX_CAMS;
            tSdkCameraCapbility sCameraInfo = new tSdkCameraCapbility();

            CameraSdkStatus status = MvApi.CameraEnumerateDevice(out sCameraList);

            if (status != CameraSdkStatus.CAMERA_STATUS_SUCCESS || iCameraNums == 0)
            {
                return(false);
            }

            //只假设连接了一个相机。
            if ((status = MvApi.CameraInit(ref sCameraList[0], -1, -1, ref m_hCamera)) != CameraSdkStatus.CAMERA_STATUS_SUCCESS)
            {
                string msg = string.Format("***Failed to init the camera! Error code is {0}", status);
                WinCall.TraceMessage(msg);
                return(false);
            }

            //Get properties description for this camera.
            MvApi.CameraGetCapability(m_hCamera, out sCameraInfo);
            m_ImageBufferSnapshot = Marshal.AllocHGlobal(sCameraInfo.sResolutionRange.iWidthMax * sCameraInfo.sResolutionRange.iHeightMax * 3 + 1024);
            return(true);
        }
Example #11
0
        private void InitCamera()
        {
            CameraSdkStatus status = 0;

            tSdkCameraDevInfo[] DevList;
            MvApi.CameraEnumerateDevice(out DevList);
            int NumDev = (DevList != null ? DevList.Length : 0);

            if (NumDev < 1)
            {
                MessageBox.Show("未扫描到相机");
                return;
            }
            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);
                //sheshe设置相机配置窗口的启动页面
                MvApi.CameraCreateSettingPage(m_hCamera, this.Handle, m_DevInfo.acFriendlyName, null, (IntPtr)0, 0);
                //设置RGB回调函数
                MvApi.CameraGrabber_SetRGBCallback(m_Grabber, m_FrameCallback, IntPtr.Zero);
                tSdkCameraCapbility cap;
                //黑白相机设置ISP输出灰度图像
                //彩色相机ISP默认输出BGR24图像

                //获得相机特性
                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, PixelFormat.Format8bppIndexed);
                    m_GrayPal = Image.Palette;
                    for (int Y = 0; Y < m_GrayPal.Entries.Length; Y++)
                    {
                        m_GrayPal.Entries[Y] = Color.FromArgb(255, Y, Y, Y);
                    }
                }
                //设置vflip,由于sdk输出的数据默认是从底部到顶部,打开flip后就可以直接转成bitmap
                MvApi.CameraSetMirror(m_hCamera, 1, 1);
                // MvApi.CameraGrabber_StartLive(m_Grabber);
            }
            else
            {
                MessageBox.Show(String.Format("打开相机失败,原因:{0}", status));
            }
        }
Example #12
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);
     }
 }
 internal static List <CameraDevice> GetAllCamera()
 {
     tSdkCameraDevInfo[] tCameraDevInfoList;
     MvApi.CameraEnumerateDevice(out tCameraDevInfoList);
     if (tCameraDevInfoList != null && tCameraDevInfoList.Length > 0)
     {
         CameraDevice device = new CameraDevice();
     }
     return(null);
 }
Example #14
0
        void UnInitCamera()
        {
            if (0 != m_hCamera)
            {
                MvApi.CameraStop(m_hCamera);
                MvApi.CameraUnInit(m_hCamera);
            }

            Marshal.FreeHGlobal(m_ImageBufferSnapshot);
            m_ImageBufferSnapshot = IntPtr.Zero;
        }
Example #15
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);
            }
        }
Example #16
0
 private void button4_Click(object sender, EventArgs e)
 {
     if (m_Grabber_1 != IntPtr.Zero)
     {
         MvApi.CameraGrabber_StopLive(m_Grabber_1);
     }
     if (m_Grabber_2 != IntPtr.Zero)
     {
         MvApi.CameraGrabber_StopLive(m_Grabber_2);
     }
 }
        protected override void GetCameraSettingData()
        {
            try
            {
                tSdkCameraCapbility cap;
                MvApi.CameraGetCapability(m_hCamera, out cap);

                if (cap.sIspCapacity.bMonoSensor == 1)
                {
                    MvApi.CameraSetIspOutFormat(m_hCamera, (uint)emImageFormat.CAMERA_MEDIA_TYPE_MONO8);
                }
                else
                {
                    MvApi.CameraSetIspOutFormat(m_hCamera, (uint)emImageFormat.CAMERA_MEDIA_TYPE_RGB8);
                }
                //long max, min, cur;
                gainMin = cap.sExposeDesc.uiAnalogGainMin;
                gainMax = cap.sExposeDesc.uiAnalogGainMax;
                int piAnalogGain = 0;
                MvApi.CameraGetAnalogGain(m_hCamera, ref piAnalogGain);

                gainCur  = piAnalogGain;
                gainUnit = "";

                shuterUnit = "us";

                shuterMin = cap.sExposeDesc.uiExposeTimeMin;
                shuterMax = cap.sExposeDesc.uiExposeTimeMax;
                double pfLineTime = 0;
                MvApi.CameraGetExposureLineTime(m_hCamera, ref pfLineTime);

                shuterCur = (long)pfLineTime;

                triggerDelayAbsMin = 0;
                triggerDelayAbsMax = 1000000;
                uint puDelayTimeUs = 0;
                MvApi.CameraGetTriggerDelayTime(m_hCamera, ref puDelayTimeUs);

                triggerDelayAbs = puDelayTimeUs;

                lineDebouncerTimeAbsMin = 0;
                lineDebouncerTimeAbsMax = 5000;
                lineDebouncerTimeAbs    = 0;

                byte[] psCameraName = new byte[255];
                MvApi.CameraGetFriendlyName(m_hCamera, psCameraName);
                CameraName = System.Text.Encoding.ASCII.GetString(psCameraName);
            }
            catch (Exception ex)
            {
                Util.WriteLog(this.GetType(), ex);
                Util.Notify("相机设置信息获取异常");
            }
        }
Example #18
0
 public void CameraStop()
 {
     if (m_Grabber != IntPtr.Zero)
     {
         MvApi.CameraGrabber_StopLive(m_Grabber);
     }
     if (t1.Status != TaskStatus.Canceled)
     {
         cts.Cancel();
         clearFlage = false;
     }
 }
Example #19
0
 private void btn_TwoCameras_Snap_Click(object sender, EventArgs e)
 {
     HDevWindowStack.Push(hv_WindowHandle);
     if (m_Grabber_1 != IntPtr.Zero)
     {
         MvApi.CameraGrabber_StopLive(m_Grabber_1);
     }
     if (m_Grabber_2 != IntPtr.Zero)
     {
         MvApi.CameraGrabber_StopLive(m_Grabber_2);
     }
 }
Example #20
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);
         }
     }
 }
Example #21
0
        /// <summary>
        /// 迈德威视相机采集到图像回调处理函数
        /// </summary>
        /// <param name="Grabber"></param>
        /// <param name="pFrameBuffer"></param>
        /// <param name="pFrameHead"></param>
        /// <param name="Context"></param>
        private void OnSDKImageGrabbed(IntPtr Grabber, IntPtr pFrameBuffer, ref tSdkFrameHead pFrameHead, IntPtr Context)
        {
            if (HoImage != null &&
                HoImage.IsInitialized())
            {
                HoImage = null;
                //System.Threading.Thread.Sleep(1);
                //GC.Collect();
                //GC.WaitForPendingFinalizers();

                IsImageGrabbed = false;
            }

            #region 迈德威视相机SDK内部像素格式转换
            // 由于黑白相机在相机打开后设置了ISP输出灰度图像
            // 因此此处pFrameBuffer=8位灰度数据
            // 否则会和彩色相机一样输出BGR24数据

            // 彩色相机ISP默认会输出BGR24图像
            // pFrameBuffer=BGR24数据

            int w = pFrameHead.iWidth;
            int h = pFrameHead.iHeight;

            if (pFrameHead.uiMediaType == (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_MONO8)
            {
                HalconDotNet.HOperatorSet.GenImage1(out HoImage, "byte", w, h, pFrameBuffer);
            }
            else if (pFrameHead.uiMediaType == (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_BGR8)
            {
                HalconDotNet.HOperatorSet.GenImageInterleaved(out HoImage, pFrameBuffer, "bgr", w, h, -1, "byte", w, h, 0, 0, -1, 0);
            }

            MvApi.CameraClearBuffer(_deviceRef);

            #endregion

            if (HoImage != null &&
                HoImage.IsInitialized())
            {
                System.Threading.Thread.Sleep(1);
                IsImageGrabbed = true;
                if (CameraImageGrabbedEvt != null)
                {
                    CameraImageGrabbedEvt(Camera, HoImage);
                }
            }
        }
Example #22
0
        public Bitmap QueryFrame(uint wTimes = 1000)
        {
            tSdkFrameHead tFrameHead;
            IntPtr        uRawBuffer;
            Bitmap        bmFrame = null;

            if (MvApi.CameraSnapToBuffer(m_hCamera, out tFrameHead, out uRawBuffer, 800) == CameraSdkStatus.CAMERA_STATUS_SUCCESS)
            {
                //将相机输出的原始数据转换为RGB格式到内存m_ImageBufferSnapshot中
                MvApi.CameraImageProcess(m_hCamera, uRawBuffer, m_ImageBufferSnapshot, ref tFrameHead);
                MvApi.CameraReleaseImageBuffer(m_hCamera, uRawBuffer);
                Image img = MvApi.CSharpImageFromFrame(m_ImageBufferSnapshot, ref tFrameHead);
                bmFrame = (Bitmap)img;
            }
            return(bmFrame);
        }
Example #23
0
        private int InitCamera()
        {
            int m_hCamera = -1;

            tSdkCameraDevInfo[] m_DevInfo = new tSdkCameraDevInfo[] { new tSdkCameraDevInfo() };
            MvApi.CameraEnumerateDevice(out m_DevInfo);
            if (m_DevInfo != null)
            {
                IntPtr m_Grabber = new IntPtr();

                if (MvApi.CameraGrabber_Create(out m_Grabber, ref m_DevInfo[0]) == CameraSdkStatus.CAMERA_STATUS_SUCCESS)
                {
                    MvApi.CameraGrabber_GetCameraHandle(m_Grabber, out m_hCamera);
                }
            }
            return(m_hCamera);
        }
Example #24
0
        public override void Close()
        {
            try
            {
                IsLink = false;

                // Reset the stopwatch.
                //stopWatch.Reset();
                if (m_Grabber != IntPtr.Zero)
                {
                    MvApi.CameraGrabber_Destroy(m_Grabber);
                }
            }
            catch (Exception ex)
            {
                Util.WriteLog(this.GetType(), ex);
                Util.Notify("相机关闭异常");
            }
        }
Example #25
0
 public override void OneShot(Command command)
 {
     try
     {
         if (IsContinuousShot || IsExtTrigger)
         {
             ContinuousShotStop();
         }
         Command = command;
         CameraSdkStatus status;
         //status = MvApi.CameraSetTriggerMode(m_hCamera, (int)emSdkSnapMode.SOFT_TRIGGER);
         status = MvApi.CameraSoftTrigger(m_hCamera);
     }
     catch
     {
         IsLink = false;
         Util.Notify("相机软触发异常");
     }
 }
Example #26
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;
     }
 }
        public override void Close()
        {
            try
            {
                IsLink = false;

                // Reset the stopwatch.
                //stopWatch.Reset();
                if (m_Grabber != IntPtr.Zero)
                {
                    MvApi.CameraGrabber_StopLive(m_Grabber);
                    MvApi.CameraGrabber_Destroy(m_Grabber);
                }
                m_Grabber = IntPtr.Zero;
            }
            catch (Exception ex)
            {
                //Util.WriteLog(this.GetType(), ex);
                Util.Notify("相机关闭异常");
                throw ex;  //抛给上层,上层捕获到该异常,不会执行其函数余下的代码;
            }
        }
        public override void Output()
        {
            if (inOutPut)
            {
                Util.Notify("报警输出中当前输出忽略");
                return;
            }

            Task.Run(() =>                       //这段代码执行采用异步操作。
            {
                lock (lockObj1)
                {
                    inOutPut = true;

                    MvApi.CameraSetIOState(m_hCamera, 0, 0);  //第一个0表示0点。第二个点表示:1为高电平(断开);0为低电平(导通)。
                    Thread.Sleep((int)outLineTime);
                    MvApi.CameraSetIOState(m_hCamera, 0, 1);  //1表示0号点设为高电平,即为断开。
                    //g_camera.Parameters[PLCamera.timer].TrySetValue(PLCamera.LineSource.Timer1Active.);
                    Util.Notify("相机报警输出完成");
                    inOutPut = false;
                }
            });
        }
Example #29
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("相机连续采集开始异常");
     }
 }
Example #30
0
        public override void Output()
        {
            if (inOutPut)
            {
                Util.Notify("报警输出中当前输出忽略");
                return;
            }
            //
            Task.Run(() =>
            {
                lock (lockObj1)
                {
                    inOutPut = true;

                    MvApi.CameraSetIOState(m_hCamera, 0, 0);
                    Thread.Sleep((int)outLineTime);
                    MvApi.CameraSetIOState(m_hCamera, 0, 1);
                    //g_camera.Parameters[PLCamera.timer].TrySetValue(PLCamera.LineSource.Timer1Active.);
                    Util.Notify("相机报警输出完成");
                    inOutPut = false;
                }
            });
        }