CameraService.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using LampInspectionMachine.Cameralibs.HKCamera;
  2. using LampInspectionMachine.Model;
  3. using MvCamCtrl.NET;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Runtime.InteropServices;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace LampInspectionMachine.Cameralibs
  11. {
  12. public class CameraService
  13. {
  14. private readonly Dictionary<Guid, ICamera> _CameraCollection;
  15. public CameraService()
  16. {
  17. _CameraCollection = new Dictionary<Guid, ICamera>();
  18. }
  19. public List<string> GetDeviceEnum()
  20. {
  21. GC.Collect();
  22. List<CCameraInfo> m_ltDeviceList = new List<CCameraInfo>();
  23. int nRet = CSystem.EnumDevices(CSystem.MV_GIGE_DEVICE | CSystem.MV_USB_DEVICE, ref m_ltDeviceList);
  24. if ( 0 != nRet )
  25. {
  26. throw new Exception("Enumerate devices fail!");
  27. }
  28. List<string> listsn = new List<string>();
  29. MyCamera.MV_CC_DEVICE_INFO device = default(MyCamera.MV_CC_DEVICE_INFO);
  30. for ( int i = 0; i < m_ltDeviceList.Count; i++ )
  31. {
  32. if ( m_ltDeviceList[ i ].nTLayerType == CSystem.MV_GIGE_DEVICE )
  33. {
  34. CGigECameraInfo gigeInfo = (CGigECameraInfo)m_ltDeviceList[i];
  35. listsn.Add(gigeInfo.chSerialNumber);
  36. }
  37. else if ( m_ltDeviceList[ i ].nTLayerType == CSystem.MV_USB_DEVICE )
  38. {
  39. CGigECameraInfo usbInfo = (CGigECameraInfo)m_ltDeviceList[i];
  40. listsn.Add(usbInfo.chSerialNumber);
  41. }
  42. }
  43. return listsn;
  44. }
  45. public bool CreateCamera(Guid id ,CameraInfo cameraInfo)
  46. {
  47. ICamera camera = new MvCamera(id, cameraInfo.SerialNumber);
  48. if ( _CameraCollection.ContainsKey(id) )
  49. {
  50. var currenCamera = _CameraCollection[id];
  51. currenCamera.CloseDevice();
  52. }
  53. else
  54. {
  55. _CameraCollection.Add(id, camera);
  56. }
  57. return true;
  58. }
  59. public Task<bool> CreateCameraAsync(Guid id, CameraInfo cameraInfo)
  60. {
  61. ICamera camera= new MvCamera(id, cameraInfo.SerialNumber);
  62. if ( _CameraCollection.ContainsKey(id) )
  63. {
  64. var currenCamera = _CameraCollection[id];
  65. currenCamera.CloseDevice();
  66. }
  67. else
  68. {
  69. _CameraCollection.Add(id, camera);
  70. }
  71. return Task.FromResult(true);
  72. }
  73. public ICamera GetCamera(Guid id)
  74. {
  75. return _CameraCollection[ id ];
  76. }
  77. public Task<ICamera> GetCameraAsync(Guid id)
  78. {
  79. return Task.FromResult(_CameraCollection[ id ]);
  80. }
  81. public void UnRegisterCamera(Guid id)
  82. {
  83. if ( _CameraCollection.ContainsKey(id) )
  84. {
  85. var camera = _CameraCollection[id];
  86. camera.CloseDevice();
  87. }
  88. }
  89. public Task UnRegisterCameraAsync(Guid id)
  90. {
  91. if ( _CameraCollection.ContainsKey(id) )
  92. {
  93. var camera = _CameraCollection[id];
  94. camera.CloseDevice();
  95. }
  96. return Task.CompletedTask;
  97. }
  98. public void Dispose()
  99. {
  100. foreach ( var camera in _CameraCollection )
  101. {
  102. try
  103. {
  104. camera.Value.CloseDevice();
  105. }
  106. catch ( Exception )
  107. {
  108. }
  109. }
  110. }
  111. }
  112. }