Пример #1
0
        /// <summary>实时抓拍一张图片</summary>
        public int GrabOne(out IJFImage img, int timeoutMilSeconds = -1)
        {
            img = null;
            if (!IsDeviceOpen)
            {
                return((int)ErrorDef.NotOpen);
            }
            if (!IsGrabbing)
            {
                return((int)ErrorDef.NotGrabbing);
            }
            JFCmrTrigMode currTM = JFCmrTrigMode.disable;

            GetTrigMode(out currTM);
            if (currTM != JFCmrTrigMode.disable)
            {
                return((int)ErrorDef.TrigModeUnMatch);
            }

            int err = 0;

            if (_payloadSize <= 0)
            {
                MyCamera.MVCC_INTVALUE stVal = new MyCamera.MVCC_INTVALUE();
                err = _hikCmr.MV_CC_GetIntValue_NET("PayloadSize", ref stVal);
                if (MyCamera.MV_OK != err)
                {
                    return((int)ErrorDef.InvokeFailed);
                }
                else
                {
                    _payloadSize = (int)stVal.nCurValue;
                }
            }

            byte[] dataBytes = new byte[_payloadSize];
            IntPtr ptr       = Marshal.UnsafeAddrOfPinnedArrayElement(dataBytes, 0);

            MyCamera.MV_FRAME_OUT_INFO_EX frameInfo = new MyCamera.MV_FRAME_OUT_INFO_EX();
            err = _hikCmr.MV_CC_GetOneFrameTimeout_NET(ptr, (uint)_payloadSize, ref frameInfo, timeoutMilSeconds);
            if (err != MyCamera.MV_OK)
            {
                return((int)ErrorDef.InvokeFailed);
            }
            img = new JFImage_Hik(dataBytes, frameInfo, _hikCmr);
            return((int)ErrorDef.Success);
        }
Пример #2
0
        /// <summary>相机是否处于触发模式</summary>
        //JFCmrTrigMode TrigMode { get; set; }
        public int GetTrigMode(out JFCmrTrigMode tm)
        {
            tm = JFCmrTrigMode.disable;
            if (!IsDeviceOpen)
            {
                return((int)ErrorDef.NotOpen);
            }
            MyCamera.MVCC_ENUMVALUE eval = new MyCamera.MVCC_ENUMVALUE();
            int err = _hikCmr.MV_CC_GetEnumValue_NET("TriggerMode", ref eval);

            //MyCamera.MVCC_INTVALUE val = new MyCamera.MVCC_INTVALUE();
            //int err = _hikCmr.MV_CC_GetIntValue_NET("TriggerMode", ref val);
            if (MyCamera.MV_OK != err)
            {
                return((int)ErrorDef.InvokeFailed);
            }
            if (eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF)
            {
                tm = JFCmrTrigMode.disable;
                return((int)ErrorDef.Success);
            }

            err = _hikCmr.MV_CC_GetEnumValue_NET("TriggerSource", ref eval);
            if (MyCamera.MV_OK != err)
            {
                return((int)ErrorDef.InvokeFailed);
            }

            if (eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE)
            {
                tm = JFCmrTrigMode.software;
                return((int)ErrorDef.Success);
            }
            else if (eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0 ||
                     eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE1 ||
                     eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE2 ||
                     eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE3)
            {
                tm = JFCmrTrigMode.hardware_line0 + ((int)eval.nCurValue - (int)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0);
                return((int)ErrorDef.Success);
            }

            return((int)ErrorDef.TrigModeUnMatch);
        }
Пример #3
0
        public override void UpdateSrc2UI()//JFRealtimeUI's API
        {
            if (InvokeRequired)
            {
                Invoke(new Action(UpdateSrc2UI));
                return;
            }
            if (null == _cmr)
            {
                return;
            }

            if (!_cmr.IsDeviceOpen)
            {
                btDev.Text                  = "打开相机";
                cbImgDispMode.Enabled       = false; //
                cbImgDispMode.SelectedIndex = 2;     //默认使用bitmap模式显示
                cbTrigSrc.Enabled           = false;
                _isTrigModeUpdating         = true;
                cbTrigSrc.Text              = "未知";
                _isTrigModeUpdating         = false;

                numBuffSize.Enabled     = false;
                _isBuffCountUpdating    = true;
                numBuffSize.Value       = 0;
                _isBuffCountUpdating    = false;
                numExposure.Enabled     = false;
                _isExposureUpdating     = true;
                numExposure.Value       = 0;
                _isExposureUpdating     = false;
                numGain.Enabled         = false;
                _isGainUpdating         = true;
                numGain.Value           = 0;
                _isGainUpdating         = false;
                chkReverseX.Enabled     = false;
                _isReverseXUpdating     = true;
                chkReverseX.Checked     = false;
                _isReverseXUpdating     = false;
                chkReverseY.Enabled     = false;
                _isReverseYUpdating     = true;
                chkReverseY.Checked     = false;
                _isReverseYUpdating     = false;
                btGrab.Enabled          = false;
                btGrab.Text             = "开始采集";
                chkContinueGrab.Enabled = false;
                chkContinueGrab.Checked = false;
                chkCallBack.Enabled     = false;
                chkCallBack.Checked     = false;
                btGrabOne.Enabled       = false;
                btSoftwareTrig.Enabled  = false;

                cbImgFileFormat.Enabled = false;
                btSave.Enabled          = false;
                return;
            }
            btDev.Text          = "关闭相机";
            numBuffSize.Enabled = true;
            numExposure.Enabled = true;
            numGain.Enabled     = true;
            chkReverseX.Enabled = true;
            chkReverseY.Enabled = true;


            int           err = 0;
            JFCmrTrigMode tm  = JFCmrTrigMode.disable;

            if (!cbTrigSrc.Focused)
            {
                _isTrigModeUpdating = true;
                err = _cmr.GetTrigMode(out tm);
                if (err != 0)
                {
                    cbTrigSrc.Text = "未知";
                }
                else
                {
                    cbTrigSrc.SelectedIndex = (int)tm;
                    cbTrigSrc.Text          = cbTrigSrc.Items[(int)tm].ToString();
                }
                _isTrigModeUpdating = false;
            }

            if (!numBuffSize.Focused)
            {
                _isBuffCountUpdating = true;
                int bf = 0;
                err = _cmr.GetBuffSize(out bf);
                numBuffSize.Value    = bf;
                _isBuffCountUpdating = false;
            }

            if (!numExposure.Focused)
            {
                _isExposureUpdating = true;
                double ex = 0;
                err = _cmr.GetExposure(out ex);
                numExposure.Value   = Convert.ToDecimal(ex);
                _isExposureUpdating = false;
            }

            if (!numGain.Focused)
            {
                _isGainUpdating = true;
                double gn = 0;
                err             = _cmr.GetGain(out gn);
                numGain.Value   = Convert.ToDecimal(gn);
                _isGainUpdating = false;
            }

            if (!chkReverseX.Focused)
            {
                _isReverseXUpdating = true;
                bool rx = false;
                err = _cmr.GetReverseX(out rx);
                chkReverseX.Checked = rx;
                _isReverseXUpdating = false;
            }

            if (!chkReverseY.Focused)
            {
                _isReverseYUpdating = true;
                bool ry = false;
                err = _cmr.GetReverseY(out ry);
                chkReverseY.Checked = ry;
                _isReverseYUpdating = false;
            }

            btGrab.Enabled        = true;
            cbImgDispMode.Enabled = !_cmr.IsGrabbing;
            if (_cmr.IsGrabbing)                 //采集图像中
            {
                cbTrigSrc.Enabled       = false; //采集图像时不能更改触发模式
                btGrab.Text             = "停止采集";
                chkContinueGrab.Enabled = false;
                chkCallBack.Enabled     = false;
                if (tm == JFCmrTrigMode.disable)
                {
                    if (chkContinueGrab.Checked)
                    {
                        btGrabOne.Enabled = false;
                    }
                    else
                    {
                        btGrabOne.Enabled = true;
                    }
                    btSoftwareTrig.Enabled = false;
                }
                else
                {
                    if (_cmr.IsRegistAcqFrameCallback) //已经注册了回调函数
                    {
                        btGrabOne.Enabled = false;
                    }
                    else
                    {
                        btGrabOne.Enabled = true;
                    }
                    if (tm == JFCmrTrigMode.software && !chkContinueGrab.Checked)
                    {
                        btSoftwareTrig.Enabled = true;
                    }
                    else
                    {
                        btSoftwareTrig.Enabled = false;
                    }
                }
            }
            else //此时未采集
            {
                cbTrigSrc.Enabled       = true;
                btGrab.Text             = "开始采集";
                chkContinueGrab.Enabled = true;
                chkCallBack.Enabled     = true;

                btGrabOne.Enabled      = false;
                btSoftwareTrig.Enabled = false;
            }



            if (cbImgDispMode.SelectedIndex == 0) //使用SDK模式显示图片
            {
                //添加代码
            }


            cbImgFileFormat.Enabled = _currImage != null;
            btSave.Enabled          = _currImage != null;
        }
Пример #4
0
        /// <summary>
        /// 开始/停止采集图像
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btGrab_Click(object sender, EventArgs e)
        {
            if (null == _cmr)
            {
                MessageBox.Show("开始采集失败:相机未设置");
                return;
            }
            int err = 0;

            if (_cmr.IsGrabbing)
            {
                if (_isAutoGrabRunning)
                {
                    _StopAutoGrab();
                }
                err = _cmr.StopGrab();
                if (0 == err)
                {
                    ShowTips("相机已停止图像采集");
                    UpdateSrc2UI();
                    return;
                }
                else
                {
                    ShowTips("未能停止相机采集,错误信息:" + _cmr.GetErrorInfo(err));
                    MessageBox.Show("未能停止相机采集,错误信息:" + _cmr.GetErrorInfo(err));
                    return;
                }
            }
            else
            {
                JFCmrTrigMode tm = JFCmrTrigMode.disable;
                _cmr.GetTrigMode(out tm);
                if (chkCallBack.Checked) //使用回调函数的方式显示图片
                {
                    if (tm == JFCmrTrigMode.disable)
                    {
                        MessageBox.Show("相机当前为禁用触发模式!不能使用回调\n请修改触发模式或取消回调");
                        return;
                    }
                    _cmr.RegistAcqFrameCallback(_HikFrameCallback);
                }
                else
                {
                    _cmr.RemoveAcqFrameCallback(_HikFrameCallback);
                }
                err = _cmr.StartGrab();
                if (0 != err)
                {
                    ShowTips("开启相机采集失败,错误信息:" + _cmr.GetErrorInfo(err));
                    MessageBox.Show("开启相机采集失败,错误信息:" + _cmr.GetErrorInfo(err));
                    return;
                }

                if (0 == cbImgDispMode.SelectedIndex)
                {
                    hcWnd.CloseWindow();
                    if (null != _currHo)
                    {
                        _currHo.Dispose();
                        _currHo = null;
                    }
                    _imgShowMode = ImgShowMode.sdk;
                }
                else if (1 == cbImgDispMode.SelectedIndex) //halcon显示
                {
                    hcWnd.OpenWindow(picBox.Location.X, picBox.Location.Y, picBox.Width, picBox.Height, picBox.Handle, "visible", "");

                    _imgShowMode = ImgShowMode.halcon;
                    if (_currBmp != null)
                    {
                        _currBmp.Dispose();
                        _currBmp = null;
                    }
                }
                else if (2 == cbImgDispMode.SelectedIndex)//bitmap显示
                {
                    hcWnd.CloseWindow();
                    if (null != _currHo)
                    {
                        _currHo.Dispose();
                        _currHo = null;
                    }
                    _imgShowMode = ImgShowMode.bitmap;
                }



                if (chkContinueGrab.Checked)
                {
                    _StartAutoGrb();
                    btGrabOne.Enabled      = false;
                    btSoftwareTrig.Enabled = false;
                }
                else //非连续采图模式
                {
                    if (tm == JFCmrTrigMode.disable)
                    {
                        btGrabOne.Enabled      = true;
                        btSoftwareTrig.Enabled = false;
                    }
                    else
                    {
                        btGrabOne.Enabled = false;
                        if (tm == JFCmrTrigMode.software)
                        {
                            btSoftwareTrig.Enabled = true;
                        }
                        else
                        {
                            btSoftwareTrig.Enabled = false;
                        }
                    }
                }
                ShowTips("相机开始图像采集...");
                UpdateSrc2UI();
                return;
            }
        }
Пример #5
0
        public int SetTrigMode(JFCmrTrigMode tm)
        {
            if (!IsDeviceOpen)
            {
                return((int)ErrorDef.NotOpen);
            }
            if (IsGrabbing)
            {
                JFCmrTrigMode currMode;
                if (0 == GetTrigMode(out currMode) && currMode == tm)
                {
                    return((int)ErrorDef.Success);
                }
                return((int)ErrorDef.Grabbing);
            }
            int  err  = 0;
            uint eVal = 0;

            do
            {
                switch (tm)
                {
                case JFCmrTrigMode.disable:
                    err = _hikCmr.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF);
                    if (err != 0)
                    {
                        break;
                    }
                    err = _hikCmr.MV_CC_SetGrabStrategy_NET(MV_GRAB_STRATEGY.MV_GrabStrategy_UpcomingImage);
                    break;

                case JFCmrTrigMode.software:
                    err = _hikCmr.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);
                    if (err != MyCamera.MV_OK)
                    {
                        break;
                    }
                    eVal = (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE;
                    err  = _hikCmr.MV_CC_SetEnumValue_NET("TriggerSource", eVal);
                    if (err != MyCamera.MV_OK)
                    {
                        break;
                    }
                    err = _hikCmr.MV_CC_SetGrabStrategy_NET(MV_GRAB_STRATEGY.MV_GrabStrategy_UpcomingImage);
                    break;

                case JFCmrTrigMode.hardware_line0:
                case JFCmrTrigMode.hardware_line1:
                case JFCmrTrigMode.hardware_line2:
                case JFCmrTrigMode.hardware_line3:
                    err = _hikCmr.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);
                    if (err != MyCamera.MV_OK)
                    {
                        break;
                    }
                    eVal = (uint)(MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0 + ((int)tm - (int)JFCmrTrigMode.hardware_line0));
                    err  = _hikCmr.MV_CC_SetEnumValue_NET("TriggerSource", eVal);
                    break;

                default:
                    err = (int)ErrorDef.TrigModeUnMatch;
                    break;
                }
            } while (false);
            if (err == MyCamera.MV_OK)
            {
                return((int)ErrorDef.Success);
            }
            return((int)ErrorDef.InvokeFailed);
        }
Пример #6
0
 public int SetTrigMode(JFCmrTrigMode tm)
 {
     throw new NotImplementedException();
 }