CameraConfigs.cs 9.2 KB

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