private IDictionary <ECameraAutoType, ECameraAutoValue> GetAutoValueDictionary() { var dictionary = new Dictionary <ECameraAutoType, ECameraAutoValue>(); var autoExposure = new MyCamera.MVCC_ENUMVALUE(); var autoGain = new MyCamera.MVCC_ENUMVALUE(); var autoWhiteBalance = new MyCamera.MVCC_ENUMVALUE(); _device.MV_CC_GetExposureAutoMode_NET(ref autoExposure); _device.MV_CC_GetGainMode_NET(ref autoGain); _device.MV_CC_GetBalanceWhiteAuto_NET(ref autoWhiteBalance); switch ((MyCamera.MV_CAM_EXPOSURE_AUTO_MODE)autoExposure.nCurValue) { case MyCamera.MV_CAM_EXPOSURE_AUTO_MODE.MV_EXPOSURE_AUTO_MODE_OFF: dictionary[ECameraAutoType.Exposure] = ECameraAutoValue.Off; break; case MyCamera.MV_CAM_EXPOSURE_AUTO_MODE.MV_EXPOSURE_AUTO_MODE_ONCE: dictionary[ECameraAutoType.Exposure] = ECameraAutoValue.Once; break; case MyCamera.MV_CAM_EXPOSURE_AUTO_MODE.MV_EXPOSURE_AUTO_MODE_CONTINUOUS: dictionary[ECameraAutoType.Exposure] = ECameraAutoValue.Continuous; break; } switch ((MyCamera.MV_CAM_GAIN_MODE)autoGain.nCurValue) { case MyCamera.MV_CAM_GAIN_MODE.MV_GAIN_MODE_OFF: dictionary[ECameraAutoType.Gain] = ECameraAutoValue.Off; break; case MyCamera.MV_CAM_GAIN_MODE.MV_GAIN_MODE_ONCE: dictionary[ECameraAutoType.Gain] = ECameraAutoValue.Once; break; case MyCamera.MV_CAM_GAIN_MODE.MV_GAIN_MODE_CONTINUOUS: dictionary[ECameraAutoType.Gain] = ECameraAutoValue.Continuous; break; } switch ((MyCamera.MV_CAM_BALANCEWHITE_AUTO)autoWhiteBalance.nCurValue) { case MyCamera.MV_CAM_BALANCEWHITE_AUTO.MV_BALANCEWHITE_AUTO_OFF: dictionary[ECameraAutoType.WhiteBalance] = ECameraAutoValue.Off; break; case MyCamera.MV_CAM_BALANCEWHITE_AUTO.MV_BALANCEWHITE_AUTO_ONCE: dictionary[ECameraAutoType.WhiteBalance] = ECameraAutoValue.Once; break; case MyCamera.MV_CAM_BALANCEWHITE_AUTO.MV_BALANCEWHITE_AUTO_CONTINUOUS: dictionary[ECameraAutoType.WhiteBalance] = ECameraAutoValue.Continuous; break; } return(dictionary); }
public override string GetImageFormat() { MyCamera.MVCC_ENUMVALUE enumParam = new MyCamera.MVCC_ENUMVALUE(); if (hikvisionCamera.MV_CC_GetEnumValue_NET("PixelFormat", ref enumParam) == MyCamera.MV_OK) { return(enumParam.nCurValue.ToString()); } return(null); }
public CameraParameterInfo GetParameterInfo() { var triggerMode = new MyCamera.MVCC_ENUMVALUE(); _device.MV_CC_GetTriggerMode_NET(ref triggerMode); return(new CameraParameterInfo( triggerMode.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON, GetParameterDictionary(), GetAutoValueDictionary())); }
/**************************************************************************** * @fn GetEnumValue * @brief 获取Enum型参数值 * @param strKey IN 参数键值,具体键值名称参考HikCameraNode.xls文档 * @param pnValue OUT 返回值 * @return 成功:0;错误:-1 ****************************************************************************/ public int GetEnumValue(string strKey, ref UInt32 pnValue) { MyCamera.MVCC_ENUMVALUE stParam = new MyCamera.MVCC_ENUMVALUE(); int nRet = m_pCSI.MV_CC_GetEnumValue_NET(strKey, ref stParam); if (MyCamera.MV_OK != nRet) { return(CO_FAIL); } pnValue = stParam.nCurValue; return(CO_OK); }
/// <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); }
private bool Acquisition(MyCamera.MV_CAM_ACQUISITION_MODE acqMode) { MyCamera.MVCC_ENUMVALUE enumParam = new MyCamera.MVCC_ENUMVALUE(); if (hikvisionCamera.MV_CC_GetAcquisitionMode_NET(ref enumParam) != MyCamera.MV_OK) { return(false); } if (enumParam.nCurValue != (uint)acqMode) { if (hikvisionCamera.MV_CC_SetAcquisitionMode_NET((uint)acqMode) != MyCamera.MV_OK) { return(false); } } if (hikvisionCamera.MV_CC_StartGrabbing_NET() != MyCamera.MV_OK) { return(false); } return(true); }
public override bool SetImageFormat(ImageFormat format) { try { if (format == ImageFormat.Mono8) { MyCamera.MVCC_ENUMVALUE stEnumValue = new MyCamera.MVCC_ENUMVALUE(); int nRet = camera.MV_CC_GetPixelFormat_NET(ref stEnumValue); if (stEnumValue.nCurValue != (uint)MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8) { uint enValue = (uint)MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8; nRet = camera.MV_CC_SetPixelFormat_NET(enValue); if (MyCamera.MV_OK != nRet) { WriteInfoLog($"{this.Info.UserID} camera Set PixelFormat failed"); } } } else { MyCamera.MVCC_ENUMVALUE stEnumValue = new MyCamera.MVCC_ENUMVALUE(); int nRet = camera.MV_CC_GetPixelFormat_NET(ref stEnumValue); if (stEnumValue.nCurValue != (uint)MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed) { uint enValue = (uint)MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed; nRet = camera.MV_CC_SetPixelFormat_NET(enValue); if (MyCamera.MV_OK != nRet) { WriteInfoLog($"{this.Info.UserID} camera Set PixelFormat failed"); } } } } catch (Exception e) { WriteErrorLog($"{this.Info.UserID} camera {e.ToString()}"); bConnectOk = false; return(false); } return(base.SetImageFormat(format)); }
private void bnGetLineMode_Click(object sender, EventArgs e) { int nRet; MyCamera.MVCC_ENUMVALUE stModeValue = new MyCamera.MVCC_ENUMVALUE(); nRet = m_pMyCamera.MV_CC_GetEnumValue_NET("LineMode", ref stModeValue); if (MyCamera.MV_OK != nRet) { ShowErrorMsg("Get Fail!", nRet); return; } cbLineMode.Items.Clear(); for (int i = 0; i < stModeValue.nSupportedNum; i++) { cbLineMode.Items.Add("LineMode" + stModeValue.nSupportValue[i]); if (stModeValue.nCurValue == stModeValue.nSupportValue[i]) { cbLineMode.SelectedIndex = i; } } }
static void Main(string[] args) { int nRet = MyCamera.MV_OK; MyCamera device = new MyCamera(); do { // ch:枚举设备 | en:Enum device MyCamera.MV_CC_DEVICE_INFO_LIST stDevList = new MyCamera.MV_CC_DEVICE_INFO_LIST(); nRet = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref stDevList); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Enum device failed:{0:x8}", nRet); break; } Console.WriteLine("Enum device count : " + Convert.ToString(stDevList.nDeviceNum)); if (0 == stDevList.nDeviceNum) { break; } MyCamera.MV_CC_DEVICE_INFO stDevInfo; // 通用设备信息 // ch:打印设备信息 en:Print device info for (Int32 i = 0; i < stDevList.nDeviceNum; i++) { stDevInfo = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(stDevList.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO)); if (MyCamera.MV_GIGE_DEVICE == stDevInfo.nTLayerType) { MyCamera.MV_GIGE_DEVICE_INFO stGigEDeviceInfo = (MyCamera.MV_GIGE_DEVICE_INFO)MyCamera.ByteToStruct(stDevInfo.SpecialInfo.stGigEInfo, typeof(MyCamera.MV_GIGE_DEVICE_INFO)); uint nIp1 = ((stGigEDeviceInfo.nCurrentIp & 0xff000000) >> 24); uint nIp2 = ((stGigEDeviceInfo.nCurrentIp & 0x00ff0000) >> 16); uint nIp3 = ((stGigEDeviceInfo.nCurrentIp & 0x0000ff00) >> 8); uint nIp4 = (stGigEDeviceInfo.nCurrentIp & 0x000000ff); Console.WriteLine("\n" + i.ToString() + ": [GigE] User Define Name : " + stGigEDeviceInfo.chUserDefinedName); Console.WriteLine("device IP :" + nIp1 + "." + nIp2 + "." + nIp3 + "." + nIp4); } else if (MyCamera.MV_USB_DEVICE == stDevInfo.nTLayerType) { MyCamera.MV_USB3_DEVICE_INFO stUsb3DeviceInfo = (MyCamera.MV_USB3_DEVICE_INFO)MyCamera.ByteToStruct(stDevInfo.SpecialInfo.stUsb3VInfo, typeof(MyCamera.MV_USB3_DEVICE_INFO)); Console.WriteLine("\n" + i.ToString() + ": [U3V] User Define Name : " + stUsb3DeviceInfo.chUserDefinedName); Console.WriteLine("\n Serial Number : " + stUsb3DeviceInfo.chSerialNumber); Console.WriteLine("\n Device Number : " + stUsb3DeviceInfo.nDeviceNumber); } } Int32 nDevIndex = 0; Console.Write("\nPlease input index (0 -- {0:d}) : ", stDevList.nDeviceNum - 1); try { nDevIndex = Convert.ToInt32(Console.ReadLine()); } catch { Console.Write("Invalid Input!\n"); break; } if (nDevIndex > stDevList.nDeviceNum - 1 || nDevIndex < 0) { Console.Write("Input Error!\n"); break; } stDevInfo = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(stDevList.pDeviceInfo[nDevIndex], typeof(MyCamera.MV_CC_DEVICE_INFO)); // ch:创建设备 | en:Create device nRet = device.MV_CC_CreateDevice_NET(ref stDevInfo); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Create device failed:{0:x8}", nRet); break; } // ch:打开设备 | en:Open device nRet = device.MV_CC_OpenDevice_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Open device failed:{0:x8}", nRet); break; } // ch:判断设备是否是设置的3D格式 | en:Judge Whether the device is set to 3D format MyCamera.MVCC_ENUMVALUE EnumValue = new MyCamera.MVCC_ENUMVALUE(); nRet = device.MV_CC_GetEnumValue_NET("PixelFormat", ref EnumValue); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get the Camera format fail:{0:x8}", nRet); break; } MyCamera.MvGvspPixelType ePixelFormat = (MyCamera.MvGvspPixelType)EnumValue.nCurValue; switch (ePixelFormat) { case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_ABC32: case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_ABC32f: case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_AB32: case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_AB32f: case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_AC32: case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_AC32f: { nRet = MyCamera.MV_OK; break; } default: { nRet = MyCamera.MV_E_SUPPORT; break; } } if (MyCamera.MV_OK != nRet) { Console.WriteLine("This is not a supported 3D format!"); break; } // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera) if (stDevInfo.nTLayerType == MyCamera.MV_GIGE_DEVICE) { int nPacketSize = device.MV_CC_GetOptimalPacketSize_NET(); if (nPacketSize > 0) { nRet = device.MV_CC_SetIntValue_NET("GevSCPSPacketSize", Convert.ToUInt32(nPacketSize)); if (nRet != MyCamera.MV_OK) { Console.WriteLine("Warning: Set Packet Size failed {0:x8}", nRet); } } else { Console.WriteLine("Warning: Get Packet Size failed {0:x8}", nPacketSize); } } // ch:获取触发模式的访问模式 | en:Get Access mode of trigger mode MyCamera.MV_XML_AccessMode pAccessMode = MyCamera.MV_XML_AccessMode.AM_NI; if (MyCamera.MV_OK != device.MV_XML_GetNodeAccessMode_NET("TriggerMode", ref pAccessMode)) { Console.WriteLine("Get Access mode of trigger mode fail! nRet [0x%x]\n", nRet); } else { // ch:设置触发模式为off || en:set trigger mode as off if (MyCamera.MV_OK != device.MV_CC_SetEnumValue_NET("TriggerMode", 0)) { Console.WriteLine("Set TriggerMode failed!"); break; } } // ch:获取包大小 || en: Get Payload Size MyCamera.MVCC_INTVALUE stParam = new MyCamera.MVCC_INTVALUE(); nRet = device.MV_CC_GetIntValue_NET("PayloadSize", ref stParam); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get PayloadSize failed:{0:x8}", nRet); break; } UInt32 nPayloadSize = stParam.nCurValue; // ch:开启抓图 | en:start grab nRet = device.MV_CC_StartGrabbing_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Start grabbing failed:{0:x8}", nRet); break; } uint nImageNum = 100; byte[] bSaveImageBuf = null; try { // ch:申请足够大的缓存,用于保存获取到的图像 bSaveImageBuf = new byte[nPayloadSize * nImageNum]; } catch (Exception ex) { Console.WriteLine("Malloc Save buffer fail!\n"); break; } uint nSaveImageSize = nPayloadSize * nImageNum; // ch:已获取的总图片大小 uint nSaveDataLen = 0; MyCamera.MV_FRAME_OUT stOutFrame = new MyCamera.MV_FRAME_OUT(); for (uint i = 0; i < nImageNum; i++) { nRet = device.MV_CC_GetImageBuffer_NET(ref stOutFrame, 1000); if (nRet == MyCamera.MV_OK) { Console.WriteLine("Get One Frame:" + "Width[" + Convert.ToString(stOutFrame.stFrameInfo.nWidth) + "] , Height[" + Convert.ToString(stOutFrame.stFrameInfo.nHeight) + "] , FrameNum[" + Convert.ToString(stOutFrame.stFrameInfo.nFrameNum) + "]"); if (nSaveImageSize > (nSaveDataLen + stOutFrame.stFrameInfo.nFrameLen)) { // ch:将图像拷贝到pSaveImageBuf | Copy one frame of image to the buffer named pSaveImageBuf Marshal.Copy(stOutFrame.pBufAddr, bSaveImageBuf, Convert.ToInt32(nSaveDataLen), Convert.ToInt32(stOutFrame.stFrameInfo.nFrameLen)); nSaveDataLen += stOutFrame.stFrameInfo.nFrameLen; } nRet = device.MV_CC_FreeImageBuffer_NET(ref stOutFrame); if (nRet != MyCamera.MV_OK) { Console.WriteLine("Free Image Buffer fail:{0:x8}", nRet); } } else { Console.WriteLine("No data:{0:x8}", nRet); } } MyCamera.MV_SAVE_POINT_CLOUD_PARAM stSavePoCloudPar = new MyCamera.MV_SAVE_POINT_CLOUD_PARAM(); stSavePoCloudPar.nLinePntNum = stOutFrame.stFrameInfo.nWidth; stSavePoCloudPar.nLineNum = stOutFrame.stFrameInfo.nHeight * nImageNum; byte[] bDstImageBuf = new byte[stSavePoCloudPar.nLineNum * stSavePoCloudPar.nLinePntNum * (16 * 3 + 4) + 2048]; uint nDstImageSize = stSavePoCloudPar.nLineNum * stSavePoCloudPar.nLinePntNum * (16 * 3 + 4) + 2048; stSavePoCloudPar.enPointCloudFileType = MyCamera.MV_SAVE_POINT_CLOUD_FILE_TYPE.MV_PointCloudFile_PLY; stSavePoCloudPar.enSrcPixelType = stOutFrame.stFrameInfo.enPixelType; stSavePoCloudPar.nSrcDataLen = nSaveDataLen; GCHandle hSrcData = GCHandle.Alloc(bSaveImageBuf, GCHandleType.Pinned); stSavePoCloudPar.pSrcData = hSrcData.AddrOfPinnedObject(); GCHandle hDstData = GCHandle.Alloc(bDstImageBuf, GCHandleType.Pinned); stSavePoCloudPar.pDstBuf = hDstData.AddrOfPinnedObject(); stSavePoCloudPar.nDstBufSize = nDstImageSize; //Save point cloud data nRet = device.MV_CC_SavePointCloudData_NET(ref stSavePoCloudPar); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Save point cloud data fail:{0:x8}", nRet); break; } FileStream file = new FileStream("PointCloudData.ply", FileMode.Create, FileAccess.Write); file.Write(bDstImageBuf, 0, Convert.ToInt32(stSavePoCloudPar.nDstBufLen)); file.Close(); Console.WriteLine("Save point cloud data succeed"); hSrcData.Free(); hDstData.Free(); // ch:停止抓图 | en:Stop grab image nRet = device.MV_CC_StopGrabbing_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Stop grabbing failed{0:x8}", nRet); break; } // ch:关闭设备 | en:Close device nRet = device.MV_CC_CloseDevice_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Close device failed{0:x8}", nRet); break; } // ch:销毁设备 | en:Destroy device nRet = device.MV_CC_DestroyDevice_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Destroy device failed:{0:x8}", nRet); break; } } while (false); if (MyCamera.MV_OK != nRet) { // ch:销毁设备 | en:Destroy device nRet = device.MV_CC_DestroyDevice_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Destroy device failed:{0:x8}", nRet); } } Console.WriteLine("Press enter to exit"); Console.ReadKey(); }
static void Main(string[] args) { int nRet = MyCamera.MV_OK; MyCamera device = new MyCamera(); do { // ch:枚举设备 | en:Enum device MyCamera.MV_CC_DEVICE_INFO_LIST stDevList = new MyCamera.MV_CC_DEVICE_INFO_LIST(); nRet = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref stDevList); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Enum device failed:{0:x8}", nRet); break; } Console.WriteLine("Enum device count : " + Convert.ToString(stDevList.nDeviceNum)); if (0 == stDevList.nDeviceNum) { break; } MyCamera.MV_CC_DEVICE_INFO stDevInfo; // 通用设备信息 // ch:打印设备信息 en:Print device info for (Int32 i = 0; i < stDevList.nDeviceNum; i++) { stDevInfo = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(stDevList.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO)); if (MyCamera.MV_GIGE_DEVICE == stDevInfo.nTLayerType) { MyCamera.MV_GIGE_DEVICE_INFO stGigEDeviceInfo = (MyCamera.MV_GIGE_DEVICE_INFO)MyCamera.ByteToStruct(stDevInfo.SpecialInfo.stGigEInfo, typeof(MyCamera.MV_GIGE_DEVICE_INFO)); uint nIp1 = ((stGigEDeviceInfo.nCurrentIp & 0xff000000) >> 24); uint nIp2 = ((stGigEDeviceInfo.nCurrentIp & 0x00ff0000) >> 16); uint nIp3 = ((stGigEDeviceInfo.nCurrentIp & 0x0000ff00) >> 8); uint nIp4 = (stGigEDeviceInfo.nCurrentIp & 0x000000ff); Console.WriteLine("\n" + i.ToString() + ": [GigE] User Define Name : " + stGigEDeviceInfo.chUserDefinedName); Console.WriteLine("device IP :" + nIp1 + "." + nIp2 + "." + nIp3 + "." + nIp4); } else if (MyCamera.MV_USB_DEVICE == stDevInfo.nTLayerType) { MyCamera.MV_USB3_DEVICE_INFO stUsb3DeviceInfo = (MyCamera.MV_USB3_DEVICE_INFO)MyCamera.ByteToStruct(stDevInfo.SpecialInfo.stUsb3VInfo, typeof(MyCamera.MV_USB3_DEVICE_INFO)); Console.WriteLine("\n" + i.ToString() + ": [U3V] User Define Name : " + stUsb3DeviceInfo.chUserDefinedName); Console.WriteLine("\n Serial Number : " + stUsb3DeviceInfo.chSerialNumber); Console.WriteLine("\n Device Number : " + stUsb3DeviceInfo.nDeviceNumber); } } Int32 nDevIndex = 0; Console.Write("\nPlease input index (0 -- {0:d}) : ", stDevList.nDeviceNum - 1); try { nDevIndex = Convert.ToInt32(Console.ReadLine()); } catch { Console.Write("Invalid Input!\n"); break; } if (nDevIndex > stDevList.nDeviceNum - 1 || nDevIndex < 0) { Console.Write("Input Error!\n"); break; } stDevInfo = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(stDevList.pDeviceInfo[nDevIndex], typeof(MyCamera.MV_CC_DEVICE_INFO)); // ch:创建设备 | en:Create device nRet = device.MV_CC_CreateDevice_NET(ref stDevInfo); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Create device failed:{0:x8}", nRet); break; } // ch:打开设备 | en:Open device nRet = device.MV_CC_OpenDevice_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Open device failed:{0:x8}", nRet); break; } // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera) if (stDevInfo.nTLayerType == MyCamera.MV_GIGE_DEVICE) { int nPacketSize = device.MV_CC_GetOptimalPacketSize_NET(); if (nPacketSize > 0) { nRet = device.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize); if (nRet != MyCamera.MV_OK) { Console.WriteLine("Warning: Set Packet Size failed {0:x8}", nRet); } } else { Console.WriteLine("Warning: Get Packet Size failed {0:x8}", nPacketSize); } } // ch:设置触发模式为off || en:set trigger mode as off if (MyCamera.MV_OK != device.MV_CC_SetEnumValue_NET("TriggerMode", 0)) { Console.WriteLine("Set TriggerMode failed!"); break; } // ch:获取包大小 || en: Get Payload Size MyCamera.MVCC_INTVALUE stParam = new MyCamera.MVCC_INTVALUE(); nRet = device.MV_CC_GetIntValue_NET("PayloadSize", ref stParam); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get PayloadSize failed:{0:x8}", nRet); break; } g_nPayloadSize = stParam.nCurValue; MyCamera.MV_CC_RECORD_PARAM stRecordPar = new MyCamera.MV_CC_RECORD_PARAM(); nRet = device.MV_CC_GetIntValue_NET("Width", ref stParam); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get Width failed: nRet {0:x8}", nRet); break; } stRecordPar.nWidth = (ushort)stParam.nCurValue; nRet = device.MV_CC_GetIntValue_NET("Height", ref stParam); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get Height failed: nRet {0:x8}", nRet); break; } stRecordPar.nHeight = (ushort)stParam.nCurValue; MyCamera.MVCC_ENUMVALUE stEnumValue = new MyCamera.MVCC_ENUMVALUE(); nRet = device.MV_CC_GetEnumValue_NET("PixelFormat", ref stEnumValue); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get Width failed: nRet {0:x8}", nRet); break; } stRecordPar.enPixelType = (MyCamera.MvGvspPixelType)stEnumValue.nCurValue; MyCamera.MVCC_FLOATVALUE stFloatValue = new MyCamera.MVCC_FLOATVALUE(); nRet = device.MV_CC_GetFloatValue_NET("ResultingFrameRate", ref stFloatValue); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get Float value failed: nRet {0:x8}", nRet); break; } // ch:帧率(大于1/16)fps | en:Frame Rate (>1/16)fps stRecordPar.fFrameRate = stFloatValue.fCurValue; // ch:码率kbps(128kbps-16Mbps) | en:Bitrate kbps(128kbps-16Mbps) stRecordPar.nBitRate = 1000; // ch:录像格式(仅支持AVI) | en:Record Format(AVI is only supported) stRecordPar.enRecordFmtType = MyCamera.MV_RECORD_FORMAT_TYPE.MV_FormatType_AVI; stRecordPar.strFilePath = "./Recording.avi"; nRet = device.MV_CC_StartRecord_NET(ref stRecordPar); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Start Record failed: nRet {0:x8}", nRet); break; } // ch:开启抓图 | en:start grab nRet = device.MV_CC_StartGrabbing_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Start grabbing failed:{0:x8}", nRet); break; } Thread hReceiveImageThreadHandle = new Thread(ReceiveImageWorkThread); hReceiveImageThreadHandle.Start(device); Console.WriteLine("Press enter to exit"); Console.ReadKey(); g_bExit = true; hReceiveImageThreadHandle.Join(); // ch:停止抓图 | en:Stop grab image nRet = device.MV_CC_StopGrabbing_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Stop grabbing failed{0:x8}", nRet); break; } // ch:停止录像 | en:Stop record nRet = device.MV_CC_StopRecord_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Stop Record failed{0:x8}", nRet); break; } // ch:关闭设备 | en:Close device nRet = device.MV_CC_CloseDevice_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Close device failed{0:x8}", nRet); break; } // ch:销毁设备 | en:Destroy device nRet = device.MV_CC_DestroyDevice_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Destroy device failed:{0:x8}", nRet); break; } } while (false); if (MyCamera.MV_OK != nRet) { // ch:销毁设备 | en:Destroy device nRet = device.MV_CC_DestroyDevice_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Destroy device failed:{0:x8}", nRet); } } Console.WriteLine("Press enter to exit"); Console.ReadKey(); }
// Get the value of various feature nodes static int GetParameters(ref MyCamera device) { if (null == device) { return(MyCamera.MV_E_PARAMETER); } int nRet = MyCamera.MV_OK; // Get value of Integer nodes. Such as, 'width' etc. MyCamera.MVCC_INTVALUE stIntVal = new MyCamera.MVCC_INTVALUE(); nRet = device.MV_CC_GetIntValue_NET("Width", ref stIntVal); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get width failed:{0:x8}", nRet); return(nRet); } Console.WriteLine("Current Width:{0:d}", stIntVal.nCurValue); // Get value of Enum nodes. Such as, 'TriggerMode' etc. MyCamera.MVCC_ENUMVALUE stEnumVal = new MyCamera.MVCC_ENUMVALUE(); nRet = device.MV_CC_GetEnumValue_NET("TriggerMode", ref stEnumVal); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get Trigger Mode failed:{0:x8}", nRet); return(nRet); } Console.WriteLine("Current TriggerMode:{0:d}", stEnumVal.nCurValue); // Get value of float nodes. Such as, 'AcquisitionFrameRate' etc. MyCamera.MVCC_FLOATVALUE stFloatVal = new MyCamera.MVCC_FLOATVALUE(); nRet = device.MV_CC_GetFloatValue_NET("AcquisitionFrameRate", ref stFloatVal); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get AcquisitionFrameRate failed:{0:x8}", nRet); return(nRet); } Console.WriteLine("Current AcquisitionFrameRate:{0:f}Fps", stFloatVal.fCurValue); // Get value of bool nodes. Such as, 'AcquisitionFrameRateEnable' etc. bool bBoolVal = false; nRet = device.MV_CC_GetBoolValue_NET("AcquisitionFrameRateEnable", ref bBoolVal); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get AcquisitionFrameRateEnable failed:{0:x8}", nRet); return(nRet); } Console.WriteLine("Current AcquisitionFrameRateEnable:{0:d}", bBoolVal); // Get value of String nodes. Such as, 'DeviceUserID' etc. MyCamera.MVCC_STRINGVALUE stStrVal = new MyCamera.MVCC_STRINGVALUE(); nRet = device.MV_CC_GetStringValue_NET("DeviceUserID", ref stStrVal); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Get DeviceUserID failed:{0:x8}", nRet); return(nRet); } Console.WriteLine("Current DeviceUserID:{0:s}", stStrVal.chCurValue); return(MyCamera.MV_OK); }