OTSBSEImageFun.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. using OTSCLRINTERFACE;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Drawing;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using OTSModelSharp.ServiceInterface;
  9. using OTSDataType;
  10. namespace OTSMeasureApp
  11. {
  12. public class OTSBSEImageFun
  13. {
  14. //OTSIncAMeasureAppForm m_MsrApp = null;
  15. NLog.Logger log ;
  16. CImageHandler imageHandle;
  17. public OTSBSEImageFun()
  18. {
  19. log = NLog.LogManager.GetCurrentClassLogger();
  20. imageHandle = new CImageHandler();
  21. }
  22. public bool GetBSEImage(COTSSample WSample,byte[] BSEImage, int iHeight, int iWidth, ref byte[] BSEImageNoBG)
  23. {
  24. return imageHandle.GetBSEImage(WSample,BSEImage, iHeight, iWidth,ref BSEImageNoBG);
  25. }
  26. public bool GetBSEImage(byte[] BSEImage, int iHeight, int iWidth, int grayStart, int grayEnd, ref byte[] BSEImageNoBG)
  27. {
  28. return imageHandle.GetBSEImage(BSEImage, iHeight, iWidth, grayStart, grayEnd,ref BSEImageNoBG);
  29. }
  30. public int GetScanImage(int iWidth, int iHeigh, ref byte[] bImageData)
  31. {
  32. //电镜设置对象
  33. COTSControlFunExport cfun = COTSControlFunExport.GetControllerInstance();
  34. int GetImgCount = 0;
  35. try
  36. {
  37. //连接电镜
  38. bool IsConnec = cfun.ConncetSem();
  39. if (!IsConnec)
  40. {
  41. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.ConncetSem() = false Failed";
  42. log.Error(strErrorInfo);
  43. return 0;
  44. }
  45. //实例电镜初始化
  46. bool IsScan = cfun.ScanInit();
  47. if (!IsScan)
  48. {
  49. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.ScanInit = false Failed";
  50. log.Error(strErrorInfo);
  51. return 0;
  52. }
  53. int a_ExternalMode = 0;
  54. //获取终止模式
  55. a_ExternalMode = cfun.GetSemExternalMode();
  56. //保存初始模式变量
  57. int a_oldMode = 0;
  58. //获取初始模式
  59. if (!cfun.GetSemScanMode(ref a_oldMode))
  60. {
  61. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.GetSemScanMode = false Failed";
  62. log.Error(strErrorInfo);
  63. return 0;
  64. }
  65. //设置当前模式
  66. if (!cfun.SetSemScanMode(a_ExternalMode))
  67. {
  68. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.SetSemScanMode = false Failed";
  69. log.Error(strErrorInfo);
  70. return 0;
  71. }
  72. #region BeamBlank
  73. int a_nBeamBlank = 0;
  74. //获取参数
  75. if (!cfun.GetSemBeamBlank(ref a_nBeamBlank))
  76. {
  77. cfun.SetSemScanMode(a_oldMode);
  78. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.GetSemBeamBlank = false Failed";
  79. log.Error(strErrorInfo);
  80. return 0;
  81. }
  82. //设置参数
  83. if (!cfun.SetSemBeamBlank(0))
  84. {
  85. cfun.SetSemScanMode(a_oldMode);
  86. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.SetSemBeamBlank = false Failed";
  87. log.Error(strErrorInfo);
  88. return 0;
  89. }
  90. #endregion
  91. #region 获得放大倍数
  92. //获得放大倍数
  93. double a_dMagnification = 0;
  94. //获取参数
  95. if (!cfun.GetSemMagnification(ref a_dMagnification))
  96. {
  97. cfun.SetSemScanMode(a_oldMode);
  98. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.GetSemMagnification = false Failed";
  99. log.Error(strErrorInfo);
  100. return 0;
  101. }
  102. #endregion
  103. #region 获取 电镜 X、Y轴 与角度
  104. //获取 电镜 X、Y轴 与角度
  105. double PositionX = 0;
  106. double PositionY = 0;
  107. double PositionR = 0;
  108. //获取参数
  109. if (!cfun.GetSemPositionXY(ref PositionX, ref PositionY, ref PositionR))
  110. {
  111. cfun.SetSemScanMode(a_oldMode);
  112. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.GetSemPositionXY = false Failed";
  113. log.Error(strErrorInfo);
  114. return 0;
  115. }
  116. #endregion
  117. #region 设置图像分辨率
  118. //设置宽度
  119. if (!cfun.SetImageSize(iWidth,iHeigh))
  120. {
  121. cfun.SetSemScanMode(a_oldMode);
  122. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.SetImageSize = false Failed";
  123. log.Error(strErrorInfo);
  124. return 0;
  125. }
  126. #endregion
  127. #region 采集时间
  128. //采集时间
  129. int nDwellTime = 4;
  130. if (!cfun.SetDwellTime(nDwellTime))
  131. {
  132. cfun.SetSemScanMode(a_oldMode);
  133. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.SetDwellTime = false Failed";
  134. log.Error(strErrorInfo);
  135. return 0;
  136. }
  137. #endregion
  138. #region MatrixSize
  139. //获得放大倍数
  140. int a_MatrixSize = 0;
  141. Size size = new Size();
  142. //获取参数
  143. size = cfun.GetMatrixSize(a_MatrixSize);
  144. size = cfun.GetMatrixSize(a_MatrixSize);
  145. #endregion
  146. //获取图像数据
  147. int resultCount = iWidth * iHeigh;
  148. GetImgCount = cfun.AcquireBSEImage(0, 0, 0, ref bImageData);
  149. //记录日志
  150. if (resultCount == GetImgCount)
  151. {
  152. //设置为原始 扫描模式
  153. cfun.SetSemScanMode(a_oldMode);
  154. }
  155. else
  156. {
  157. cfun.SetSemScanMode(a_oldMode);
  158. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.AcquireBSEImage = 0 Failed";
  159. log.Error(strErrorInfo);
  160. }
  161. }
  162. catch (Exception ex)
  163. {
  164. //记录日志
  165. log.Error(ex.Message.ToString());
  166. string strErrorInfo = "(OTSBSEImageFun.GetScanImage) Exception Error Happend";
  167. log.Error(strErrorInfo);
  168. }
  169. return GetImgCount;
  170. }
  171. }
  172. }