/// <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); }
void _HikFrameCallback(IntPtr pData, ref MV_FRAME_OUT_INFO_EX pFrameInfo) { MVCC_INTVALUE stVal = new MVCC_INTVALUE(); int err = _hikCmr.MV_CC_GetIntValue_NET("PayloadSize", ref stVal); if (MyCamera.MV_OK != err) { throw new Exception("HikFrameCallback failed bt MV_CC_GetIntValue_NET(\"PayloadSize\") return errorCode = " + err); } _payloadSize = (int)stVal.nCurValue; byte[] bytes = new byte[_payloadSize]; Marshal.Copy(pData, bytes, 0, _payloadSize); JFImage_Hik img = new JFImage_Hik(bytes, pFrameInfo, _hikCmr); if (null != AcqFrameEvent) { AcqFrameEvent(this, img); } }