TuCameraManager.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using PaintDotNet.Base.CommTool;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Runtime.InteropServices;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using TUCAMAPI;
  11. namespace TUCamera
  12. {
  13. public class TUCameraManager
  14. {
  15. private TUCAM_INIT m_itApi; // SDK initialize environment object
  16. private List<TUCamera> m_cameraList; // The list of cameras object
  17. private TUCamera m_currentCamera;
  18. private static TUCameraManager m_cameraManager = null;
  19. private System.Timers.Timer _timerBreath;
  20. private TUCameraManager()
  21. {
  22. m_cameraList = new List<TUCamera>();
  23. }
  24. public static TUCameraManager GetInstance()
  25. {
  26. if (m_cameraManager == null)
  27. {
  28. m_cameraManager = new TUCameraManager();
  29. m_cameraManager.m_currentCamera = new TUCamera(0);
  30. m_cameraManager.InitManager(); //TODO: 开发阶段,自动初始化;产品阶段,需要寻找合适的初始化时机。
  31. }
  32. return m_cameraManager;
  33. }
  34. public void InitManager()
  35. {
  36. Logs.Write("InitManager");
  37. m_cameraList.Clear();
  38. InitCamThreadEntry();
  39. _timerBreath = new System.Timers.Timer();
  40. _timerBreath.Elapsed += (s, e) =>
  41. {
  42. try
  43. {
  44. var bitmap = m_currentCamera.OneShoot();
  45. bitmap?.Save(@"temp\d8214e60-68a9-479e-a777-d879835c69ea.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
  46. }
  47. catch { }
  48. };
  49. _timerBreath.Interval = 60000;
  50. _timerBreath.Start();
  51. }
  52. private void InitCamThreadEntry()
  53. {
  54. try
  55. {
  56. IntPtr strPath = Marshal.StringToHGlobalAnsi(System.Environment.CurrentDirectory);
  57. m_itApi.uiCamCount = 0;
  58. m_itApi.pstrConfigPath = strPath;
  59. TUCamAPI.TUCAM_Api_Init(ref m_itApi);
  60. for (uint i = 0; i < m_itApi.uiCamCount; ++i)
  61. {
  62. TUCamera camera = new TUCamera(i);
  63. camera.Open(); //TODO 开发阶段,默认打开;产品阶段,需要寻找合适的打开时机。
  64. //获取相机sn
  65. string cameraSn;
  66. string cameraName;
  67. camera.ReadRegisterData(out cameraSn);
  68. if (!string.IsNullOrEmpty(cameraSn))
  69. {
  70. if (FileOperationHelper.CheckCameraSNAndReturnName(Application.StartupPath + "\\array.dll", cameraSn, out cameraName))
  71. {
  72. camera.cameraName = cameraName == null ? "" : cameraName;
  73. m_cameraList.Add(camera);
  74. }
  75. }
  76. camera.Close();
  77. }
  78. //TODO 开发阶段,自动设定第一个相机为当前的相机
  79. if (m_cameraList.Count > 0)
  80. {
  81. SetCurrentCamera(0);
  82. }
  83. }
  84. catch (Exception ex)
  85. {
  86. MessageBox.Show(ex.ToString());
  87. }
  88. }
  89. public void UnInitManager()
  90. {
  91. Logs.Write("UnInitManager");
  92. for (int i = 0; i < m_cameraList.Count; i++)
  93. {
  94. m_cameraList[i].Close();
  95. }
  96. m_cameraList.Clear();
  97. TUCamAPI.TUCAM_Api_Uninit();
  98. _timerBreath.Stop();
  99. try
  100. {
  101. System.IO.File.Delete(@"temp\d8214e60-68a9-479e-a777-d879835c69ea.jpg");
  102. }
  103. catch { }
  104. }
  105. /// <summary>
  106. /// 返回相机数量
  107. /// </summary>
  108. /// <returns></returns>
  109. public int CameraCount => m_cameraList.Count;
  110. /// <summary>
  111. /// 返回相机列表
  112. /// </summary>
  113. /// <returns></returns>
  114. public List<TUCamera> GetCameraList()
  115. {
  116. //UnInitManager();
  117. //InitManager();
  118. return m_cameraList;
  119. }
  120. /// <summary>
  121. /// 设置当前使用相机
  122. /// </summary>
  123. /// <param name="idx"></param>
  124. public void SetCurrentCamera(int idx)
  125. {
  126. if ((0 <= idx) && (idx < m_cameraList.Count))
  127. {
  128. m_currentCamera = m_cameraList[idx];
  129. m_currentCamera.Open();
  130. }
  131. }
  132. public TUCamera GetCurrentCamera()
  133. {
  134. return m_currentCamera;
  135. }
  136. }
  137. }