public static int RealeaseSource(ref MyCamera.MV_FRAME_OUT frame) { int nRet = 0;; if (frame.pBufAddr != IntPtr.Zero) { //nRet = m_pCSI.MV_CC_FreeImageBuffer_NET(ref frame); } return(nRet); }
public void ReceiveThreadProcess() { MyCamera.MV_FRAME_OUT stFrameInfo = new MyCamera.MV_FRAME_OUT(); MyCamera.MV_DISPLAY_FRAME_INFO stDisplayInfo = new MyCamera.MV_DISPLAY_FRAME_INFO(); while (m_bGrabbing) { int nRet = m_MyCamera.MV_CC_GetImageBuffer_NET(ref stFrameInfo, 1000); if (nRet == MyCamera.MV_OK) { stDisplayInfo.hWnd = pictureBox1.Handle; stDisplayInfo.pData = stFrameInfo.pBufAddr; stDisplayInfo.nDataLen = stFrameInfo.stFrameInfo.nFrameLen; stDisplayInfo.nWidth = stFrameInfo.stFrameInfo.nWidth; stDisplayInfo.nHeight = stFrameInfo.stFrameInfo.nHeight; stDisplayInfo.enPixelType = stFrameInfo.stFrameInfo.enPixelType; if (RemoveCustomPixelFormats(stFrameInfo.stFrameInfo.enPixelType)) { m_MyCamera.MV_CC_FreeImageBuffer_NET(ref stFrameInfo); continue; } else { m_MyCamera.MV_CC_DisplayOneFrame_NET(ref stDisplayInfo); m_MyCamera.MV_CC_FreeImageBuffer_NET(ref stFrameInfo); } } else { if (bnTriggerMode.Checked) { Thread.Sleep(5); } } } }
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:start grab nRet = device.MV_CC_StartGrabbing_NET(); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Start grabbing failed:{0:x8}", nRet); break; } int nCount = 0; MyCamera.MV_FRAME_OUT FrameInfo = new MyCamera.MV_FRAME_OUT(); while (nCount++ != 100) { nRet = device.MV_CC_GetImageBuffer_NET(ref FrameInfo, 1000); // ch:获取一帧图像 | en:Get one image if (MyCamera.MV_OK == nRet) { Console.WriteLine("Get Image Buffer:" + "Width[" + Convert.ToString(FrameInfo.stFrameInfo.nWidth) + "] , Height[" + Convert.ToString(FrameInfo.stFrameInfo.nHeight) + "] , FrameNum[" + Convert.ToString(FrameInfo.stFrameInfo.nFrameNum) + "]"); if (FrameInfo.pBufAddr != IntPtr.Zero) { nRet = device.MV_CC_FreeImageBuffer_NET(ref FrameInfo); if (nRet != MyCamera.MV_OK) { Console.WriteLine("Free Image Buffer fail:{0:x8}", nRet); } } } else { Console.WriteLine("No data:{0:x8}", nRet); } } // 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:判断设备是否是设置的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("Serial Number : " + stUsb3DeviceInfo.chSerialNumber); Console.WriteLine("Device Number : " + stUsb3DeviceInfo.chModelName); } } 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:设置软触发模式 | en:Set Trigger Mode and Set Trigger Source nRet = device.MV_CC_SetEnumValueByString_NET("TriggerMode", "On"); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set Trigger Mode failed:{0:x8}", nRet); break; } nRet = device.MV_CC_SetEnumValueByString_NET("TriggerSource", "Software"); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set Trigger Source failed:{0:x8}", nRet); break; } UInt32 nImageNodeNum = 5; // ch:设置缓存节点个数 | en:Set number of image node nRet = device.MV_CC_SetImageNodeNum_NET(nImageNodeNum); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set number of image node fail:{0:x8}", nRet); break; } Console.WriteLine("\n**************************************************************************"); Console.WriteLine("* 0.MV_GrabStrategy_OneByOne; 1.MV_GrabStrategy_LatestImagesOnly; *"); Console.WriteLine("* 2.MV_GrabStrategy_LatestImages; 3.MV_GrabStrategy_UpcomingImage; *"); Console.WriteLine("**************************************************************************"); Console.Write("Please Input Grab Strategy:"); UInt32 nGrabStrategy = 0; try { nGrabStrategy = (UInt32)Convert.ToInt32(Console.ReadLine()); } catch { Console.Write("Invalid Input!\n"); break; } // ch:U3V相机不支持MV_GrabStrategy_UpcomingImage | en:U3V device not support UpcomingImage if (nGrabStrategy == (UInt32)MyCamera.MV_GRAB_STRATEGY.MV_GrabStrategy_UpcomingImage && MyCamera.MV_USB_DEVICE == stDevInfo.nTLayerType) { Console.Write("U3V device not support UpcomingImage\n"); break; } switch (nGrabStrategy) { case (UInt32)MyCamera.MV_GRAB_STRATEGY.MV_GrabStrategy_OneByOne: { Console.Write("Grab using the MV_GrabStrategy_OneByOne default strategy\n"); nRet = device.MV_CC_SetGrabStrategy_NET(MyCamera.MV_GRAB_STRATEGY.MV_GrabStrategy_OneByOne); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set Grab Strategy fail:{0:x8}", nRet); break; } } break; case (UInt32)MyCamera.MV_GRAB_STRATEGY.MV_GrabStrategy_LatestImagesOnly: { Console.Write("Grab using strategy MV_GrabStrategy_LatestImagesOnly\n"); nRet = device.MV_CC_SetGrabStrategy_NET(MyCamera.MV_GRAB_STRATEGY.MV_GrabStrategy_LatestImagesOnly); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set Grab Strategy fail:{0:x8}", nRet); break; } } break; case (UInt32)MyCamera.MV_GRAB_STRATEGY.MV_GrabStrategy_LatestImages: { Console.Write("Grab using strategy MV_GrabStrategy_LatestImages\n"); nRet = device.MV_CC_SetGrabStrategy_NET(MyCamera.MV_GRAB_STRATEGY.MV_GrabStrategy_LatestImages); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set Grab Strategy fail:{0:x8}", nRet); break; } // ch:设置输出缓存个数 | en:Set Output Queue Size nRet = device.MV_CC_SetOutputQueueSize_NET(2); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set Grab Strategy fail:{0:x8}", nRet); break; } } break; case (UInt32)MyCamera.MV_GRAB_STRATEGY.MV_GrabStrategy_UpcomingImage: { Console.Write("Grab using strategy MV_GrabStrategy_UpcomingImage\n"); nRet = device.MV_CC_SetGrabStrategy_NET(MyCamera.MV_GRAB_STRATEGY.MV_GrabStrategy_UpcomingImage); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Set Grab Strategy fail:{0:x8}", nRet); break; } Thread hUpcomingThread = new Thread(UpcomingThread); hUpcomingThread.Start(device); } break; default: Console.Write("Input error!Use default strategy:MV_GrabStrategy_OneByOne\n"); 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; } // ch:发送软触发命令 | en:Send Trigger Software command for (UInt32 i = 0; i < nImageNodeNum; i++) { nRet = device.MV_CC_SetCommandValue_NET("TriggerSoftware"); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Send Trigger Software command fail:{0:x8}", nRet); break; } Thread.Sleep(500);//如果帧率过小或TriggerDelay很大,可能会出现软触发命令没有全部起效而导致取不到数据的情况 } MyCamera.MV_FRAME_OUT stOutFrame = new MyCamera.MV_FRAME_OUT(); if (nGrabStrategy != (UInt32)MyCamera.MV_GRAB_STRATEGY.MV_GrabStrategy_UpcomingImage) { while (true) { nRet = device.MV_CC_GetImageBuffer_NET(ref stOutFrame, 0); if (MyCamera.MV_OK == nRet) { Console.WriteLine("Get Image Buffer:" + "Width[" + Convert.ToString(stOutFrame.stFrameInfo.nWidth) + "] , Height[" + Convert.ToString(stOutFrame.stFrameInfo.nHeight) + "] , FrameNum[" + Convert.ToString(stOutFrame.stFrameInfo.nFrameNum) + "]"); } else { Console.WriteLine("No data:{0:x8}", nRet); break; } nRet = device.MV_CC_FreeImageBuffer_NET(ref stOutFrame); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Free Image Buffer fail:{0:x8}", nRet); } } } else//仅用于upcoming { nRet = device.MV_CC_GetImageBuffer_NET(ref stOutFrame, 5000); if (MyCamera.MV_OK == nRet) { Console.WriteLine("Get Image Buffer:" + "Width[" + Convert.ToString(stOutFrame.stFrameInfo.nWidth) + "] , Height[" + Convert.ToString(stOutFrame.stFrameInfo.nHeight) + "] , FrameNum[" + Convert.ToString(stOutFrame.stFrameInfo.nFrameNum) + "]"); nRet = device.MV_CC_FreeImageBuffer_NET(ref stOutFrame); if (MyCamera.MV_OK != nRet) { Console.WriteLine("Free Image Buffer fail:{0:x8}", nRet); } } else { Console.WriteLine("No data:{0:x8}", nRet); } } // 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(); }