using PaintDotNet.Base.CommTool; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using TUCAMAPI; namespace TUCamera { public class TUCameraManager { private TUCAM_INIT m_itApi; // SDK initialize environment object private List m_cameraList; // The list of cameras object private TUCamera m_currentCamera; private static TUCameraManager m_cameraManager = null; private System.Timers.Timer _timerBreath; private TUCameraManager() { m_cameraList = new List(); } public static TUCameraManager GetInstance() { if (m_cameraManager == null) { m_cameraManager = new TUCameraManager(); m_cameraManager.m_currentCamera = new TUCamera(0); m_cameraManager.InitManager(); //TODO: 开发阶段,自动初始化;产品阶段,需要寻找合适的初始化时机。 } return m_cameraManager; } public void InitManager() { Logs.Write("InitManager"); m_cameraList.Clear(); InitCamThreadEntry(); _timerBreath = new System.Timers.Timer(); _timerBreath.Elapsed += (s, e) => { try { var bitmap = m_currentCamera.OneShoot(); bitmap?.Save(@"temp\d8214e60-68a9-479e-a777-d879835c69ea.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); } catch { } }; _timerBreath.Interval = 60000; _timerBreath.Start(); } private void InitCamThreadEntry() { try { IntPtr strPath = Marshal.StringToHGlobalAnsi(System.Environment.CurrentDirectory); m_itApi.uiCamCount = 0; m_itApi.pstrConfigPath = strPath; TUCamAPI.TUCAM_Api_Init(ref m_itApi); for (uint i = 0; i < m_itApi.uiCamCount; ++i) { TUCamera camera = new TUCamera(i); camera.Open(); //TODO 开发阶段,默认打开;产品阶段,需要寻找合适的打开时机。 //获取相机sn string cameraSn; string cameraName; camera.ReadRegisterData(out cameraSn); if (!string.IsNullOrEmpty(cameraSn)) { if (FileOperationHelper.CheckCameraSNAndReturnName(Application.StartupPath + "\\array.dll", cameraSn, out cameraName)) { camera.cameraName = cameraName == null ? "" : cameraName; m_cameraList.Add(camera); } } camera.Close(); } //TODO 开发阶段,自动设定第一个相机为当前的相机 if (m_cameraList.Count > 0) { SetCurrentCamera(0); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } public void UnInitManager() { Logs.Write("UnInitManager"); for (int i = 0; i < m_cameraList.Count; i++) { m_cameraList[i].Close(); } m_cameraList.Clear(); TUCamAPI.TUCAM_Api_Uninit(); _timerBreath.Stop(); try { System.IO.File.Delete(@"temp\d8214e60-68a9-479e-a777-d879835c69ea.jpg"); } catch { } } /// /// 返回相机数量 /// /// public int CameraCount => m_cameraList.Count; /// /// 返回相机列表 /// /// public List GetCameraList() { //UnInitManager(); //InitManager(); return m_cameraList; } /// /// 设置当前使用相机 /// /// public void SetCurrentCamera(int idx) { if ((0 <= idx) && (idx < m_cameraList.Count)) { m_currentCamera = m_cameraList[idx]; m_currentCamera.Open(); } } public TUCamera GetCurrentCamera() { return m_currentCamera; } } }