/// <summary> /// 连续触发模式 /// </summary> /// <returns></returns> bool SetContinue() { try { int nRet = 0; #if(SDK) if (g_BlCallBack == true) { nRet = g_MyCamera.MV_CC_StopGrabbing_NET(); g_BlCallBack = false; ImageCallback = null; g_MyCamera.MV_CC_RegisterImageCallBackEx_NET(ImageCallback, IntPtr.Zero); nRet = g_MyCamera.MV_CC_StartGrabbing_NET(); } //连续采集模式 nRet = g_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode", 0); if (MyCamera.MV_OK != nRet) { return false; } return true; #endif return true; } catch (Exception ex) { Log.L_I.WriteError(NameClass, ex); return false; } }
/// <summary> /// Open the camera and hook up image acquisition call back /// </summary> /// <returns></returns> public bool Open() { // Create var ret = _myCamera.MV_CC_CreateDevice_NET(ref _cameraInfo); if (ret != 0) { Log("Unable to create camera"); return(false); } // Open ret = _myCamera.MV_CC_OpenDevice_NET(); if (ret != 0) { _myCamera.MV_CC_DestroyDevice_NET(); Log("Unable to open camera"); return(false); } // Register image acquisition call back _imageCallbackDelegate = ImageCallback; ret = _myCamera.MV_CC_RegisterImageCallBackEx_NET(_imageCallbackDelegate, IntPtr.Zero); if (ret != 0) { Log("Register image acquisition call back failed"); _myCamera.MV_CC_DestroyDevice_NET(); return(false); } // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera) if (CameraType == CameraType.Gige) { int optimalSize = _myCamera.MV_CC_GetOptimalPacketSize_NET(); if (optimalSize > 0) { ret = _myCamera.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)optimalSize); if (ret != MyCamera.MV_OK) { Log("Set packet size failed"); } } else { Log("Get packet size failed"); } } // ch:设置采集连续模式 | en:Set Continues Aquisition Mode _myCamera.MV_CC_SetEnumValue_NET("AcquisitionMode", 2); // ch:工作在连续模式 | en:Acquisition On Continuous Mode 0:SingleFrame单帧 1:MultiFrame多帧 2:Continuous连续 _myCamera.MV_CC_SetEnumValue_NET("TriggerMode", 0); // ch:连续模式 | en:Continuous 0:Off 1:On // Reserve buffer _buffer = new byte[_bufferSize]; _bufForSaveImage = new byte[_buffSizeForSaveImage]; return(true); }
private void RegisterGrabEvent() { if ((chooseHIK) && (!chooseBasler)) { if (cameraArr1[0] != null) { cbImage1 = new MyCamera.cbOutputExdelegate(ImageCallBack_1); cameraArr1[0].MV_CC_RegisterImageCallBackEx_NET(cbImage1, (IntPtr)0); } if (cameraArr1[1] != null) { cbImage2 = new MyCamera.cbOutputExdelegate(ImageCallBack_2); cameraArr1[1].MV_CC_RegisterImageCallBackEx_NET(cbImage2, (IntPtr)0); } } else if ((chooseBasler) && (!chooseHIK)) { if (cameraArr2[0] != null && true == cameraArr2[0].IsOpen) { cameraArr2[0].StreamGrabber.ImageGrabbed += OnImageGrabbed_1; } if (cameraArr2[1] != null && true == cameraArr2[1].IsOpen) { cameraArr2[1].StreamGrabber.ImageGrabbed += OnImageGrabbed_2; } } }
public HikCamera(MyCamera device, MyCamera.MV_IMAGE_BASIC_INFO info) { _imageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc); _handle = GCHandle.Alloc(this); _device = device; _info = info; _count = 0; _grabCount = -1; }
public HikCamera() { try { Image = new HImage(); ImageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc); CameraReconnectCallback = new MyCamera.cbExceptiondelegate(ReconnectCallbackFunc); } catch (Exception e) { WriteErrorLog(e.ToString()); } }
public void ResetMember() { m_pDeviceList = new MyCamera.MV_CC_DEVICE_INFO_LIST(); m_bGrabbing = false; m_nCanOpenDeviceNum = 0; m_nDevNum = 0; DeviceListAcq(); m_nFrames = new int[4]; cbImage = new MyCamera.cbOutputExdelegate(ImageCallBack); m_bTimerFlag = false; m_bSaveImg = new bool[4]; m_hDisplayHandle = new IntPtr[4]; m_pDeviceInfo = new MyCamera.MV_CC_DEVICE_INFO[4]; }
public MultipleDemo() { InitializeComponent(); m_pDeviceList = new MyCamera.MV_CC_DEVICE_INFO_LIST(); m_bGrabbing = false; m_nCanOpenDeviceNum = 0; m_nDevNum = 0; DeviceListAcq(); m_pMyCamera = new MyCamera[4]; m_pDeviceInfo = new MyCamera.MV_CC_DEVICE_INFO[4]; m_nFrames = new int[4]; cbImage = new MyCamera.cbOutputExdelegate(ImageCallBack); m_bTimerFlag = false; m_bSaveImg = new bool[4]; m_hDisplayHandle = new IntPtr[4]; }
public void HardMode() { cbImage = new MyCamera.cbOutputExdelegate(HardCapture); int nIndex; foreach (var item in m_listUserDefinedName) { nIndex = item.Key; m_dicMyCamera[nIndex].MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON); m_dicMyCamera[nIndex].MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0); m_dicMyCamera[nIndex].MV_CC_RegisterImageCallBackEx_NET(cbImage, (IntPtr)nIndex); } IsContinuesMode = false; IsTriggerMode = false; IsHardMode = true; }
public HikCamera(IVisionCameraInfo info) : base(info) { try { Image = new HImage(); camera = new MyCamera(); ImageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc); CameraReconnectCallback = new MyCamera.cbExceptiondelegate(ReconnectCallbackFunc); if (camera == null) { WriteErrorLog("It can not recognite the camera of " + UserID); } } catch (Exception e) { WriteErrorLog(e.ToString()); } }
public override bool InitialCamera(string _serialNumber) { index = Convert.ToInt32(_serialNumber.Split('_')[1]); deviceInfo = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(stDevList.pDeviceInfo[index], typeof(MyCamera.MV_CC_DEVICE_INFO)); hikvisionCamera = new MyCamera(); if (hikvisionCamera == null) { return(false); } if (hikvisionCamera.MV_CC_CreateDevice_NET(ref deviceInfo) != MyCamera.MV_OK) { return(false); } if (hikvisionCamera.MV_CC_OpenDevice_NET() != MyCamera.MV_OK) { hikvisionCamera.MV_CC_DestroyDevice_NET(); return(false); } MyCamera.cbOutputExdelegate ImageCallback = new MyCamera.cbOutputExdelegate(StreamGrabber_ImageGrabber); if (hikvisionCamera.MV_CC_RegisterImageCallBackEx_NET(ImageCallback, IntPtr.Zero) != MyCamera.MV_OK) { return(false); } if (deviceInfo.nTLayerType == MyCamera.MV_GIGE_DEVICE)//探测网络最佳包大小(只对Gige相机有效) { int nPacketSize = hikvisionCamera.MV_CC_GetOptimalPacketSize_NET(); if (nPacketSize > 0) { if (hikvisionCamera.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize) != MyCamera.MV_OK) { return(false); } } else { return(false); } } return(true); }
/// <summary> /// 触发模式 /// </summary> bool SetTrigger() { try { int nRet = 0; #if(SDK) if (g_BaseParCamera.BlUsingTrigger)//使用软触发 { //触发模式,触发源 nRet = g_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode", 1); nRet = g_MyCamera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)TriggerSource_e); if (!g_BlCallBack && TriggerSource_e != TriggerSourceCamera_enum.Software)//非软触发模式 { nRet = g_MyCamera.MV_CC_StopGrabbing_NET(); g_BlCallBack = true; ImageCallback = new MyCamera.cbOutputExdelegate(GrabHal_CallBack); nRet = g_MyCamera.MV_CC_RegisterImageCallBackEx_NET(ImageCallback, IntPtr.Zero); nRet = g_MyCamera.MV_CC_StartGrabbing_NET(); } } if (MyCamera.MV_OK != nRet) { return false; } return true; #endif return true; } catch (Exception ex) { Log.L_I.WriteError(NameClass, ex); return false; } }
public void TriggerConfiguration() { // ch:设置采集连续模式 | en:Set Continues Aquisition Mode getonecamera.MV_CC_SetEnumValue_NET("AcquisitionMode", 2); //set param // ch:触发源选择:0 - Line0; | en:Trigger source select:0 - Line0; // 1 - Line1; // 2 - Line2; // 3 - Line3; // 4 - Counter; // 7 - Software; if (TriggerMode == TriggerModes.Continuous) { nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerMode", 0); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set TriggerMode failed!"); } nRet = getonecamera.MV_CC_SetTriggerDelay_NET(0); if (nRet != MyCamera.MV_OK) { Console.WriteLine("Set GainAuto failed!"); } } else if (TriggerMode == TriggerModes.Unknow) { nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerMode", 1); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set TriggerMode failed!"); } nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerSource", 7); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set TriggerSource failed!"); } nRet = getonecamera.MV_CC_SetTriggerDelay_NET(0); if (nRet != MyCamera.MV_OK) { Console.WriteLine("Set GainAuto failed!"); } } else if (TriggerMode == TriggerModes.HardWare) { nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerMode", 1); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set TriggerMode failed!"); } // 1 - Line1; // 2 - Line2; // 3 - Line3; if (TriggerSource == AqDevice.TriggerSources.Line1) { nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerSource", 1); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set TriggerSource failed!"); } } else if (TriggerSource == AqDevice.TriggerSources.Line2) { nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerSource", 2); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set TriggerSource failed!"); } } else if (TriggerSource == AqDevice.TriggerSources.Line3) { nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerSource", 2); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set TriggerSource failed!"); } } //rising edge nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerActivation", 1); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set TriggerActivation failed!"); } nRet = getonecamera.MV_CC_SetTriggerDelay_NET(0); if (nRet != MyCamera.MV_OK) { Console.WriteLine("Set GainAuto failed!"); } } // ch:注册回调函数 | en:Register image callback ImageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc); }
static void Main(string[] args) { int nRet = MyCamera.MV_OK; 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 nRet = device.MV_CC_SetEnumValue_NET("TriggerMode", 0); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set TriggerMode failed!"); break; } // ch:注册回调函数 | en:Register image callback ImageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc); nRet = device.MV_CC_RegisterImageCallBackEx_NET(ImageCallback, IntPtr.Zero); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Register image callback failed!"); break; } // ch:开启抓图 || en: start grab image nRet = device.MV_CC_StartGrabbing_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Start grabbing failed:{0:x8}", nRet); break; } Console.WriteLine("Press enter to exit"); Console.ReadLine(); // ch:停止抓图 | en:Stop grabbing 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(); }
private bool DeviceOpenAll() { if (m_stDeviceList.nDeviceNum == 0) { StrErrorMsg = "无相机设备"; return(false); } cbImage = new MyCamera.cbOutputExdelegate(ImageCallBack); int nIndex; string UserDefinedName; foreach (var item in m_listUserDefinedName) { nIndex = item.Key; UserDefinedName = item.Value; //获取选择的设备信息 MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(m_stDeviceList.pDeviceInfo[nIndex], typeof(MyCamera.MV_CC_DEVICE_INFO)); m_dicMyCamera[nIndex] = new MyCamera(); if (m_dicMyCamera[nIndex] == null) { StrErrorMsg = "相机" + UserDefinedName + "对象创建失败"; m_dicMyCamera.Remove(nIndex); return(false); } int nRet = m_dicMyCamera[nIndex].MV_CC_CreateDevice_NET(ref device); if (MyCamera.MV_OK != nRet) { StrErrorMsg = "相机" + UserDefinedName + "创建设备失败"; m_dicMyCamera.Remove(nIndex); return(false); } for (int i = 0; i < 2; i++) { nRet = m_dicMyCamera[nIndex].MV_CC_OpenDevice_NET(); if (MyCamera.MV_OK != nRet) { StrErrorMsg = "相机" + UserDefinedName + "打开设备失败,正在尝试重连"; Thread.Sleep(1000); } else { break; } } if (MyCamera.MV_OK != nRet) { StrErrorMsg = "相机" + UserDefinedName + "打开设备失败(" + nRet.ToString("X") + ")"; m_dicMyCamera.Remove(nIndex); return(false); } else { m_pDeviceInfo[nIndex] = device; //探测网络最佳包大小 int nPacketSize = m_dicMyCamera[nIndex].MV_CC_GetOptimalPacketSize_NET(); if (nPacketSize > 0) { nRet = m_dicMyCamera[nIndex].MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize); if (nRet != MyCamera.MV_OK) { StrErrorMsg = "相机" + UserDefinedName + "设置数据包大小失败(" + nRet.ToString("X") + ")"; } } else { StrErrorMsg = "相机" + UserDefinedName + "设置数据包大小失败(" + nRet.ToString("X") + ")"; } //打开软触发模式 m_dicMyCamera[nIndex].MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON); m_dicMyCamera[nIndex].MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE); ////打开实时模式 //m_dicMyCamera[nIndex].MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF); m_stFrameInfo[nIndex] = new MyCamera.MV_FRAME_OUT_INFO_EX(); m_dicSaveImge[nIndex] = new SaveImage(); m_dicImageCallBackSignal[nIndex] = new EventWaitHandle(false, EventResetMode.AutoReset); m_dicMyCamera[nIndex].MV_CC_RegisterImageCallBackEx_NET(cbImage, (IntPtr)nIndex); } } return(true); }
//打开相机 public override void OpenCamera() { int nRet = -1; #region FindCamera if (!Model.m_bCameraFound) { nRet = CameraOperator.EnumDevices(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref m_pDeviceList); if (0 != nRet) { MessageBox.Show("枚举设备失败!"); Model.m_bCameraFound = false; return; } Model.m_bCameraFound = true; } #endregion #region OpenCamera if (!Model.m_bCameraOpened) { //ch:获取选择的设备信息 | en:Get selected device information MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(m_pDeviceList.pDeviceInfo[0], //打开第一个相机 typeof(MyCamera.MV_CC_DEVICE_INFO)); // ch:打开设备 | en:Open device nRet = m_pOperator.Open(ref device); if (MyCamera.MV_OK != nRet) { MessageBox.Show("设备打开失败!"); return; } m_pOperator.SetEnumValue("AcquisitionMode", 2); // 工作在连续模式 m_pOperator.SetEnumValue("TriggerMode", Model.m_bTriggerMode); // 连续拍摄模式 Model.m_bCameraOpened = true; } #endregion #region StartGrabbing if (!Model.m_bGrabbing) { m_pOperator.GetIntValue("WidthMax", ref iWidth); m_pOperator.GetIntValue("HeightMax", ref iHeigth); m_nBufSizeForDriver = iWidth * iHeigth * 3; m_pBufForDriver = new byte[iWidth * iHeigth * 3]; m_nBufSizeForSaveImage = iWidth * iHeigth * 3 * 3 + 2048; m_pBufForSaveImage = new byte[iWidth * iHeigth * 3 * 3 + 2048]; m_pDataForRed = new byte[iWidth * iHeigth]; m_pDataForGreen = new byte[iWidth * iHeigth]; m_pDataForBlue = new byte[iWidth * iHeigth]; // ch:注册回调函数 | en:Register image callback ImageCallback = new MyCamera.cbOutputExdelegate(GrabImage); nRet = m_pOperator.RegisterImageCallBackForRGB(ImageCallback, IntPtr.Zero); if (CameraOperator.CO_OK != nRet) { MessageBox.Show("注册回调失败!"); return; } // ch:开启抓图 | en:start grab nRet = m_pOperator.StartGrabbing(); if (MyCamera.MV_OK != nRet) { MessageBox.Show("开始取流失败!"); return; } Model.m_bGrabbing = true; } #endregion }
public short Open() { try { if (null == this.camera) { this.camera = new MyCamera(); } int nRet; // ch:创建设备列表 en:Create Device List System.GC.Collect(); nRet = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref deviceList); if (0 != nRet) { return((short)nRet); } if (this.deviceList.nDeviceNum < 1) { return(-1); } // 获取设备信息 MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(deviceList.pDeviceInfo[0], typeof(MyCamera.MV_CC_DEVICE_INFO)); if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE) { IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stGigEInfo, 0); MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_GIGE_DEVICE_INFO)); } else if (device.nTLayerType == MyCamera.MV_USB_DEVICE) { IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stUsb3VInfo, 0); MyCamera.MV_USB3_DEVICE_INFO usbInfo = (MyCamera.MV_USB3_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_USB3_DEVICE_INFO)); } // ch:打开设备 | en:Open device nRet = this.camera.MV_CC_CreateDevice_NET(ref device); if (MyCamera.MV_OK != nRet) { return(-2); } nRet = this.camera.MV_CC_OpenDevice_NET(); if (MyCamera.MV_OK != nRet) { this.camera.MV_CC_DestroyDevice_NET(); return(-2); } // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera) if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE) { int nPacketSize = this.camera.MV_CC_GetOptimalPacketSize_NET(); if (nPacketSize > 0) { nRet = this.camera.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize); } } //设置参数 nRet = this.camera.MV_CC_SetExposureAutoMode_NET((uint)MyCamera.MV_CAM_EXPOSURE_AUTO_MODE.MV_EXPOSURE_AUTO_MODE_OFF); nRet = this.camera.MV_CC_SetGainMode_NET((uint)MyCamera.MV_CAM_GAIN_MODE.MV_GAIN_MODE_OFF); // ch:设置采集连续模式 | en:Set Continues Aquisition Mode this.camera.MV_CC_SetEnumValue_NET("AcquisitionMode", 2); // ch:工作在连续模式 | en:Acquisition On Continuous Mode this.camera.MV_CC_SetEnumValue_NET("TriggerMode", 0); // ch:连续模式 | en:Continuous // ch:注册回调函数 | en:Register image callback imageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc); nRet = this.camera.MV_CC_RegisterImageCallBackEx_NET(imageCallback, IntPtr.Zero); if (MyCamera.MV_OK != nRet) { return(-3); } return(0); } catch (Exception) { return(-5); } }