public void SetCameraConfigFile(string file) { CameraConfigFile = file; if (!string.IsNullOrEmpty(file)) { //获取相机配置参数 string configFile = $"{System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase}/VisionPlatform/Camera/CameraConfig/{CameraSerial}/ConfigFile/{CameraConfigFile}"; if (File.Exists(configFile)) { cameraConfigParam = JsonSerialization.DeserializeObjectFromFile <CameraConfigParam>(configFile); //还原相机配置 try { CameraFactory.ConfigurateCamera(CameraSerial, cameraConfigParam); } catch (Exception) { } } else { cameraConfigParam = CameraFactory.GetCameraConfigration(CameraSerial); JsonSerialization.SerializeObjectToFile(cameraConfigParam, configFile); } } }
/// <summary> /// 加载配置文件 /// </summary> /// <param name="file">文件路径</param> public void LoadFromFile(string file) { try { if (string.IsNullOrEmpty(file)) { throw new ArgumentException("无效路径/文件不存在"); } CameraConfigParam cameraConfigParam = JsonSerialization.DeserializeObjectFromFile <CameraConfigParam>(file); if (Camera?.IsOpen == true) { CameraFactory.ConfigurateCamera(Camera.Info.SerialNumber, cameraConfigParam); } } catch (Exception ex) { OnMessageRaised(MessageLevel.Err, ex.Message, ex); } finally { if (CameraConfigViewModel?.Camera?.IsOpen == true) { Camera.Grab(); //刷新控件显示 Camera = Camera; } } }
/// <summary> /// 保存到文件中 /// </summary> /// <param name="file">文件路径(全路径)</param> public void SaveToFile(string file) { try { if (string.IsNullOrEmpty(file)) { throw new ArgumentException("文件名无效"); } if (Camera?.IsOpen == true) { var cameraConfigParam = new CameraConfigParam(); cameraConfigParam.PixelFormat = Camera.PixelFormat; cameraConfigParam.TriggerMode = Camera.TriggerMode; cameraConfigParam.TriggerSource = Camera.TriggerSource; cameraConfigParam.TriggerActivation = Camera.TriggerActivation; cameraConfigParam.ExposureTime = Camera.ExposureTime; cameraConfigParam.Gain = Camera.Gain; JsonSerialization.SerializeObjectToFile(cameraConfigParam, file); //刷新配置文件列表 UpdateCameraConfigFiles(); } else { OnMessageRaised(MessageLevel.Warning, "相机无效"); } } catch (Exception ex) { OnMessageRaised(MessageLevel.Err, ex.Message, ex); } }
/// <summary> /// 获取相机配置 /// </summary> /// <param name="cameraSerial">相机序列号</param> /// <returns></returns> public static CameraConfigParam GetCameraConfigration(string cameraSerial) { var cameraConfigParam = new CameraConfigParam(); if (Cameras.ContainsKey(cameraSerial ?? "") && (Cameras[cameraSerial]?.IsOpen == true)) { cameraConfigParam.PixelFormat = Cameras[cameraSerial].PixelFormat; cameraConfigParam.TriggerMode = Cameras[cameraSerial].TriggerMode; cameraConfigParam.TriggerSource = Cameras[cameraSerial].TriggerSource; cameraConfigParam.TriggerActivation = Cameras[cameraSerial].TriggerActivation; cameraConfigParam.ExposureTime = Cameras[cameraSerial].ExposureTime; cameraConfigParam.Gain = Cameras[cameraSerial].Gain; } return(cameraConfigParam); }
/// <summary> /// 配置相机 /// </summary> /// <param name="cameraSerial">相机序列号</param> /// <param name="cameraConfigParam">相机配置参数</param> public static void ConfigurateCamera(string cameraSerial, CameraConfigParam cameraConfigParam) { if (Cameras.ContainsKey(cameraSerial ?? "") && (Cameras[cameraSerial]?.IsOpen == true)) { //配置像素格式 if ((Cameras[cameraSerial].PixelFormatTypeEnum?.Contains(cameraConfigParam.PixelFormat) == true) && (Cameras[cameraSerial].PixelFormat != cameraConfigParam.PixelFormat) && (cameraConfigParam.PixelFormat != EPixelFormatType.Unknown)) { if (Cameras[cameraSerial].IsGrabbing) { Cameras[cameraSerial].StopGrab(); Cameras[cameraSerial].PixelFormat = cameraConfigParam.PixelFormat; Cameras[cameraSerial].Grab(); } else { Cameras[cameraSerial].PixelFormat = cameraConfigParam.PixelFormat; } } //配置触发模式 if ((Cameras[cameraSerial].TriggerModeEnum?.Contains(cameraConfigParam.TriggerMode) == true) && (Cameras[cameraSerial].TriggerMode != cameraConfigParam.TriggerMode) && (cameraConfigParam.TriggerMode != ETriggerModeStatus.Unknown)) { Cameras[cameraSerial].TriggerMode = cameraConfigParam.TriggerMode; } if (cameraConfigParam.TriggerMode == ETriggerModeStatus.On) { //配置触发源 if ((Cameras[cameraSerial].TriggerSourceEnum?.Contains(cameraConfigParam.TriggerSource) == true) && (Cameras[cameraSerial].TriggerSource != cameraConfigParam.TriggerSource) && (cameraConfigParam.TriggerSource != ETriggerSource.Unknown)) { Cameras[cameraSerial].TriggerSource = cameraConfigParam.TriggerSource; } if (cameraConfigParam.TriggerSource != ETriggerSource.Software) { //配置有效触发信号 if ((Cameras[cameraSerial].TriggerActivationEnum?.Contains(cameraConfigParam.TriggerActivation) == true) && (Cameras[cameraSerial].TriggerActivation != cameraConfigParam.TriggerActivation) && (cameraConfigParam.TriggerActivation != ETriggerActivation.Unknown)) { Cameras[cameraSerial].TriggerActivation = cameraConfigParam.TriggerActivation; } } } //配置曝光值 if (Cameras[cameraSerial].ExposureTime != cameraConfigParam.ExposureTime) { Cameras[cameraSerial].ExposureTime = cameraConfigParam.ExposureTime; } //配置增益值 if (Cameras[cameraSerial].Gain != cameraConfigParam.Gain) { Cameras[cameraSerial].Gain = cameraConfigParam.Gain; } } }