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;
                }
            }
        }