/// <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); }
/// <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); }
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; }
/// <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; } }
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); }
public int SetTrigMode(JFCmrTrigMode tm) { throw new NotImplementedException(); }