CameraConfigs.cs 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Runtime.InteropServices;
  6. using System.Runtime.Remoting.Messaging;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using PaintDotNet.Base.CommTool;
  11. using PaintDotNet.Base.SettingModel;
  12. using PaintDotNet.Camera;
  13. namespace PaintDotNet.ImageCollect
  14. {
  15. public class CameraConfigs
  16. {
  17. private string m_filePath = Application.StartupPath + "\\Config\\" + Startup.instance.SettingPrefix + "\\CameraParam\\";
  18. private static CameraConfigs m_cameraConfig = null;
  19. private CameraParamModel m_currentCameraParamModel = null;
  20. private string m_currentConfigFileName = null;
  21. private CameraConfigs()
  22. {
  23. if (!System.IO.Directory.Exists(m_filePath))
  24. {
  25. System.IO.Directory.CreateDirectory(m_filePath);//不存在就创建目录
  26. }
  27. }
  28. public static CameraParamModel.ParameterSets Settings
  29. {
  30. get
  31. {
  32. return GetInstance().m_currentCameraParamModel.parame;
  33. }
  34. }
  35. public static CameraConfigs GetInstance()
  36. {
  37. if (m_cameraConfig == null)
  38. {
  39. m_cameraConfig = new CameraConfigs();
  40. try
  41. {
  42. var name = Startup.instance.configModel.CameraConfig;
  43. m_cameraConfig.m_currentConfigFileName = name == null ? "CameraParam" : name;
  44. m_cameraConfig.m_currentCameraParamModel = m_cameraConfig.GetCameraParamModel(m_cameraConfig.m_currentConfigFileName);
  45. }
  46. catch
  47. {
  48. m_cameraConfig.m_currentConfigFileName = "CameraParam";
  49. m_cameraConfig.m_currentCameraParamModel = m_cameraConfig.GetCameraParamModel(m_cameraConfig.m_currentConfigFileName);
  50. }
  51. }
  52. return m_cameraConfig;
  53. }
  54. public string FilePath
  55. {
  56. get
  57. {
  58. return this.m_filePath;
  59. }
  60. }
  61. public string CurrentConfigFileName
  62. {
  63. get
  64. {
  65. return this.m_currentConfigFileName;
  66. }
  67. }
  68. /// <summary>
  69. /// 获取所有相机配置文件名称
  70. /// </summary>
  71. /// <returns></returns>
  72. public List<string> GetAllConfigFiles()
  73. {
  74. List<string> configs = new List<string>();
  75. DirectoryInfo TheFolder = new DirectoryInfo(m_filePath);
  76. foreach (FileInfo NextFile in TheFolder.GetFiles())
  77. {
  78. configs.Add(NextFile.Name.Replace(".xml", ""));
  79. }
  80. return configs;
  81. }
  82. public Boolean FileExist(string fileName)
  83. {
  84. DirectoryInfo TheFolder = new DirectoryInfo(m_filePath);
  85. foreach (FileInfo NextFile in TheFolder.GetFiles())
  86. {
  87. if (NextFile.Name.ToLower().Equals(fileName.ToLower() + ".xml"))
  88. {
  89. return true;
  90. }
  91. }
  92. return false;
  93. }
  94. /// <summary>
  95. /// 获取配置文件的完整路径
  96. /// </summary>
  97. /// <param name="fileName">文件名</param>
  98. /// <returns></returns>
  99. public string GetFileFullPath(string fileName)
  100. {
  101. string filePath = this.m_filePath;
  102. if (fileName.ToLower().Contains(".xml"))
  103. {
  104. filePath += fileName.ToLower();
  105. }
  106. else
  107. {
  108. filePath += fileName + ".xml";
  109. }
  110. return filePath;
  111. }
  112. /// <summary>
  113. /// 读取配置参数
  114. /// </summary>
  115. /// <param name="fileName">配置文件名称</param>
  116. /// <returns></returns>
  117. public CameraParamModel GetCameraParamModel(string fileName)
  118. {
  119. try
  120. {
  121. string filePath = GetFileFullPath(fileName);
  122. m_currentConfigFileName = fileName;
  123. m_currentCameraParamModel = XmlSerializeHelper.DESerializer<CameraParamModel>(FileOperationHelper.ReadStringFromFile(filePath, FileMode.Open));
  124. }
  125. catch (Exception)
  126. {
  127. m_currentCameraParamModel = XmlSerializeHelper.DESerializer<CameraParamModel>(FileOperationHelper.ReadStringFromFile(Application.StartupPath + "\\Config\\" + Startup.instance.SettingPrefix + "\\CameraParam.xml", FileMode.Open));
  128. }
  129. return m_currentCameraParamModel;
  130. }
  131. public void CameraParamInit()
  132. {
  133. ICamera m_camera = CameraManager.CurrentCamera;
  134. int id = m_camera.ResolutionId;
  135. // 分辨率
  136. if (id != m_currentCameraParamModel.parame.Resolution)
  137. {
  138. m_camera.ResolutionId = m_currentCameraParamModel.parame.Resolution;
  139. }
  140. //相机旋转
  141. var rotate = m_currentCameraParamModel.parame.Rotate;
  142. m_camera.Rotate = rotate;
  143. m_camera.SetROI(m_currentCameraParamModel.parame.previewRectX, m_currentCameraParamModel.parame.previewRectY, m_currentCameraParamModel.parame.previewRectW, m_currentCameraParamModel.parame.previewRectH);
  144. // 曝光
  145. int autoExposure = m_currentCameraParamModel.parame.ATExposure;
  146. if (autoExposure == 1)
  147. {
  148. m_camera.AutoExposure = 1;
  149. }
  150. else
  151. {
  152. m_camera.AutoExposure = 0;
  153. m_camera.ExposureTime = m_currentCameraParamModel.parame.LNExposure;
  154. }
  155. m_camera.Target = m_currentCameraParamModel.parame.Brightness;
  156. m_camera.Light = m_currentCameraParamModel.parame.Light;
  157. //白平衡
  158. int whiteBalance = m_currentCameraParamModel.parame.WhiteBalance;
  159. if (whiteBalance == 1)
  160. {
  161. // 自动白平衡
  162. m_camera.WhiteBalanceMode = 2;
  163. }
  164. else
  165. {
  166. // 手动白平衡
  167. m_camera.WhiteBalanceMode = 0;
  168. m_camera.RedGain = m_currentCameraParamModel.parame.RedChannel; //usec
  169. m_camera.GreenGain = m_currentCameraParamModel.parame.GreenChannel; //usec
  170. m_camera.BlueGain = m_currentCameraParamModel.parame.BlueChannel; //usec
  171. // 全局增益
  172. m_camera.Gain = m_currentCameraParamModel.parame.GlobalGain; //usec
  173. }
  174. // 色彩饱和度
  175. m_camera.Saturation = m_currentCameraParamModel.parame.Saturation; //usec
  176. // 相机模式
  177. int monochromatic = m_currentCameraParamModel.parame.Monochromatic;
  178. //锐化
  179. m_camera.Sharpness = m_currentCameraParamModel.parame.Sharpness;
  180. m_camera.HorizontalMirrored = m_currentCameraParamModel.parame.Horizontal == 1 ^ rotate == 2;
  181. m_camera.VerticalMirrored = m_currentCameraParamModel.parame.Vertical == 1 ^ rotate == 2;
  182. m_camera.GrayMode = monochromatic; //usec
  183. }
  184. /// <summary>
  185. /// 读取
  186. /// </summary>
  187. /// <returns></returns>
  188. public CameraParamModel GetCurrentCameraParamModel()
  189. {
  190. return GetCameraParamModel(m_currentConfigFileName);
  191. }
  192. public CameraParamModel GetDefaultCameraParamModel()
  193. {
  194. return GetCameraParamModel("CameraParam");
  195. }
  196. public void SetCameraParamModel(CameraParamModel cameraParam)
  197. {
  198. m_currentCameraParamModel = cameraParam;
  199. }
  200. /// <summary>
  201. /// 保存配置文件
  202. /// </summary>
  203. /// <param name="stageModelXml"></param>
  204. /// <param name="fileName"></param>
  205. public void Save(CameraParamModel cameraParamModel, string fileName)
  206. {
  207. string stageModelXml = XmlSerializeHelper.XmlSerialize<CameraParamModel>(cameraParamModel);
  208. string filePath = GetFileFullPath(fileName);
  209. FileOperationHelper.WriteStringToFile(stageModelXml, filePath, FileMode.Create);
  210. }
  211. /// <summary>
  212. /// 保存当前配置文件
  213. /// </summary>
  214. /// <param name="stageModelXml"></param>
  215. /// <param name="fileName"></param>
  216. public void Save()
  217. {
  218. Save(m_currentCameraParamModel, m_currentConfigFileName);
  219. }
  220. public void SaveAs(string fileName)
  221. {
  222. Save(m_currentCameraParamModel, fileName);
  223. }
  224. public void Delete(string name)
  225. {
  226. string fileFullPath = GetFileFullPath(name);
  227. System.IO.File.Delete(fileFullPath);
  228. }
  229. }
  230. }