/// <summary> /// 打开设备 /// </summary> /// <returns></returns> public override bool DoOpen() { ////ErrorMessage.Clear(); try { if (m_objCurDeviceInfo == null) { ////ErrorMessage.Append("还没有获取设备。"); return(false); } __CloseDevice(); m_objIGXDevice = m_objIGXFactory.OpenDeviceBySN(m_objCurDeviceInfo.GetSN(), GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE); if (m_objIGXDevice == null) { ////ErrorMessage.Append("大恒相机打开设备失败。"); return(false); } m_objIGXStream = m_objIGXDevice.OpenStream(0); if (m_objIGXStream == null) { ////ErrorMessage.Append("大恒相机打开设备通道失败。"); return(false); } // 建议用户在打开网络相机之后,根据当前网络环境设置相机的流通道包长值, // 以提高网络相机的采集性能 GX_DEVICE_CLASS_LIST objDeviceClass = m_objIGXDevice.GetDeviceInfo().GetDeviceClass(); if (GX_DEVICE_CLASS_LIST.GX_DEVICE_CLASS_GEV == objDeviceClass) { IGXFeatureControl fc = m_objIGXDevice.GetRemoteFeatureControl(); if (fc != null) { // 判断设备是否支持流通道数据包功能 if (true == fc.IsImplemented("GevSCPSPacketSize")) { // 获取当前网络环境的最优包长值 uint nPacketSize = m_objIGXStream.GetOptimalPacketSize(); // 将最优包长值设置为当前设备的流通道包长值 fc.GetIntFeature("GevSCPSPacketSize").SetValue(nPacketSize); } } } return(true); } catch (Exception ex) { return(false); } }
/// <summary> /// 打开相机 /// </summary> public override void Open() { // 如果设备已经打开则关闭,保证相机在初始化出错情况下能再次打开 if (null != objIGXDevice) { objIGXDevice.Close(); objIGXDevice = null; } //打开设备 objIGXDevice = IGXFactory.GetInstance().OpenDeviceBySN(strName, GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE); objIGXFeatureControl = objIGXDevice.GetRemoteFeatureControl(); //打开流 objIGXStream = objIGXDevice.OpenStream(0); objIGXStreamFeatureControl = objIGXStream.GetFeatureControl(); // 建议用户在打开网络相机之后,根据当前网络环境设置相机的流通道包长值, // 以提高网络相机的采集性能,设置方法参考以下代码。 GX_DEVICE_CLASS_LIST objDeviceClass = objIGXDevice.GetDeviceInfo().GetDeviceClass(); if (GX_DEVICE_CLASS_LIST.GX_DEVICE_CLASS_GEV == objDeviceClass) { // 判断设备是否支持流通道数据包功能 if (true == objIGXFeatureControl.IsImplemented("GevSCPSPacketSize")) { // 获取当前网络环境的最优包长值 uint nPacketSize = objIGXStream.GetOptimalPacketSize(); // 将最优包长值设置为当前设备的流通道包长值 objIGXFeatureControl.GetIntFeature("GevSCPSPacketSize").SetValue(nPacketSize); } } //初始化相机参数 objIGXFeatureControl.GetEnumFeature("AcquisitionMode").SetValue("Continuous"); //设置采集模式连续采集 objIGXFeatureControl.GetEnumFeature("TriggerSource").SetValue("Software"); //设置触发源软触发 objIGXFeatureControl.GetEnumFeature("TriggerMode").SetValue("On"); //默认单张 }
private void Snapshot_Click(object sender, EventArgs e) { try { //1.Open Device // Before using any GxIAPINET methods, the GxIAPINET must be initialized. m_objIGXFactory = IGXFactory.GetInstance(); m_objIGXFactory.Init(); //open device List <IGXDeviceInfo> listGXDeviceInfo = new List <IGXDeviceInfo>(); // Close stream __CloseStream(); // If the device is opened then close it to ensure the camera could open again. __CloseDevice(); // Enumerate all camera devices m_objIGXFactory.UpdateDeviceList(200, listGXDeviceInfo); // Check if found any device if (listGXDeviceInfo.Count <= 0) { MessageBox.Show("No devices found!"); return; } //Open the first found device m_objIGXDevice = m_objIGXFactory.OpenDeviceBySN(listGXDeviceInfo[0].GetSN(), GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE); m_objIGXFeatureControl = m_objIGXDevice.GetRemoteFeatureControl(); // Open stream if (null != m_objIGXDevice) { m_objIGXStream = m_objIGXDevice.OpenStream(0); } // It is recommended that the user set the camera's stream channel packet length value // according to the current network environment after turning on // the network camera to improve the collection performance of the network camera. // For the setting method, refer to the following code. GX_DEVICE_CLASS_LIST objDeviceClass = m_objIGXDevice.GetDeviceInfo().GetDeviceClass(); if (GX_DEVICE_CLASS_LIST.GX_DEVICE_CLASS_GEV == objDeviceClass) { // Determine whether the device supports the stream channel packet function. if (true == m_objIGXFeatureControl.IsImplemented("GevSCPSPacketSize")) { // Get the optimal packet length value of the current network environment uint nPacketSize = m_objIGXStream.GetOptimalPacketSize(); // Set the optimal packet length value to the stream channel packet length of the current device. m_objIGXFeatureControl.GetIntFeature("GevSCPSPacketSize").SetValue(nPacketSize); } } __InitDevice(); m_objGxBitmap = new GxBitmap(m_objIGXDevice, m_pic_ShowImage); //2.Start acquisition // Start stream channel acquisition if (null != m_objIGXStream) { m_objIGXStream.StartGrab(); } // Send AcquisitionStart command if (null != m_objIGXFeatureControl) { m_objIGXFeatureControl.GetCommandFeature("AcquisitionStart").Execute(); } //3.Snapshot IImageData objIImageData = null; double dElapsedtime = 0; uint nTimeout = 500; //Flush image queues to clear out-of-date images if (null != m_objIGXStream) { m_objIGXStream.FlushQueue(); } //Send TriggerSoftware commands if (null != m_objIGXFeatureControl) { m_objIGXFeatureControl.GetCommandFeature("TriggerSoftware").Execute(); } //Get image if (null != m_objIGXStream) { //Start stopwatch m_objStopTime.Start(); objIImageData = m_objIGXStream.GetImage(nTimeout); //Stop stopwatch and get the ElapsedTime dElapsedtime = m_objStopTime.Stop(); } m_objGxBitmap.Show(objIImageData); string strFileName = @"D:\TestImages\SWS.bmp"; m_objGxBitmap.SaveBmp(objIImageData, strFileName); if (null != objIImageData) { // Release resource objIImageData.Destroy(); } //4.Stop acquisition // Send AcquisitionStop command if (null != m_objIGXFeatureControl) { m_objIGXFeatureControl.GetCommandFeature("AcquisitionStop").Execute(); } // Stop stream channel acquisition if (null != m_objIGXStream) { m_objIGXStream.StopGrab(); } //5.Close device // Reset statistical time count m_objStatistic.Reset(); // close stream and device __CloseAll(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }