FormHalconTool.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using CommonMethods;
  12. using HalconDotNet;
  13. using ChoiceTech.Halcon.Control;
  14. using ViewROI;
  15. using Sunny.UI;
  16. namespace HalconTool
  17. {
  18. public partial class FormHalconTool : Form
  19. {
  20. public HalconTool myHalconTool = null;
  21. public IToolInfo myToolInfo = null;
  22. public HWindowTool_Smart myHwindow = new HWindowTool_Smart();
  23. public FormHalconTool(ref object halconTool)
  24. {
  25. InitializeComponent();
  26. // 若窗体还未被初始化,则此时仍是object类型,就无法对类型强转
  27. if (halconTool.GetType().FullName != "System.Object")
  28. {
  29. myToolInfo = (IToolInfo)halconTool;
  30. myHalconTool = (HalconTool)myToolInfo.tool;
  31. }
  32. _instance = this;
  33. }
  34. private static readonly object lockObkect = new object();
  35. private static FormHalconTool _instance;
  36. public static FormHalconTool Instance
  37. {
  38. get
  39. {
  40. if(_instance == null)
  41. {
  42. lock (lockObkect)
  43. {
  44. if (_instance == null)
  45. {
  46. object halconTool = new object();
  47. _instance = new FormHalconTool(ref halconTool);
  48. }
  49. }
  50. }
  51. return _instance;
  52. }
  53. }
  54. //private void rdo_readMultImage_CheckedChanged(object sender, EventArgs e)
  55. //{
  56. // if (rdo_readOneImage.Checked)
  57. // {
  58. // this.ckb_autoSwitch.Visible = false;
  59. // this.panelOneImage.Visible = true;
  60. // this.panelMultImage.Visible = false;
  61. // this.btn_browseImage.Visible = false;
  62. // myHalconTool.workMode = WorkMode.ReadOneImage;
  63. // myHalconTool.outputImageFilePath = myHalconTool.imagePath;
  64. // }
  65. // else
  66. // {
  67. // if(myHalconTool.L_imageFile.Count > 0)
  68. // {
  69. // this.ckb_autoSwitch.Visible = true;
  70. // this.panelMultImage.Visible = true;
  71. // this.panelOneImage.Visible = false;
  72. // this.btn_browseImage.Visible = true;
  73. // myHalconTool.workMode = WorkMode.ReadMultImage;
  74. // myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
  75. // }
  76. // }
  77. // btn_runHalconInterfaceTool_Click(null, null);
  78. //}
  79. private void FormHalconTool_Load(object sender, EventArgs e)
  80. {
  81. gbImageDisp.Controls.Add(myHwindow);
  82. myHwindow.Dock = DockStyle.Fill;
  83. InitTool();
  84. }
  85. //private void btn_readImage_Click(object sender, EventArgs e)
  86. //{
  87. // myHalconTool.ReadImage(out myHalconTool.imagePath);
  88. // this.tbx_imagePath.Text = myHalconTool.imagePath;
  89. // btn_runHalconInterfaceTool_Click(null, null);
  90. //}
  91. //private void btn_runHalconInterfaceTool_Click(object sender, EventArgs e)
  92. //{
  93. // if(myHalconTool.workMode == WorkMode.ReadOneImage)
  94. // {
  95. // }
  96. // if(myHalconTool.workMode == WorkMode.ReadMultImage)
  97. // {
  98. // }
  99. // if (File.Exists(this.tbx_imagePath.Text))
  100. // {
  101. // myHalconTool.Run(SoftwareRunState.Debug);
  102. // myHalconTool.imagePath = tbx_imagePath.Text;
  103. // ParamsTrans();
  104. // }
  105. //}
  106. //private void btn_selectImageDirectory_Click(object sender, EventArgs e)
  107. //{
  108. // myHalconTool.imageDirectoryPath = string.Empty;
  109. // try
  110. // {
  111. // FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog();
  112. // if (Directory.Exists(myHalconTool.imageDirectoryPath))
  113. // folderBrowseDialog.SelectedPath = myHalconTool.imageDirectoryPath;
  114. // folderBrowseDialog.Description = "请选择图像文件夹路径";
  115. // if (folderBrowseDialog.ShowDialog() == DialogResult.OK)
  116. // {
  117. // myHalconTool.imageDirectoryPath = folderBrowseDialog.SelectedPath;
  118. // this.tbx_imageDirectory.Text = myHalconTool.imageDirectoryPath;
  119. // myHalconTool.L_imageFile.Clear();
  120. // string[] files = Directory.GetFiles(folderBrowseDialog.SelectedPath);
  121. // for (int i = 0; i < files.Length; i++)
  122. // {
  123. // FileInfo fileInfo = new FileInfo(files[i]);
  124. // if (fileInfo.Extension == ".jpg" || fileInfo.Extension == ".bmp" || fileInfo.Extension == ".png" || fileInfo.Extension == ".tif")
  125. // myHalconTool.L_imageFile.Add(files[i]);
  126. // }
  127. // if (myHalconTool.L_imageFile.Count > 0)
  128. // {
  129. // myHalconTool.currentImageIndex = 0;
  130. // myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
  131. // myHalconTool.DispImage();
  132. // myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[0]);
  133. // lbl_imageName.Text = myHalconTool.currentImageName;
  134. // }
  135. // lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张";
  136. // }
  137. // }
  138. // catch (Exception ex)
  139. // {
  140. // this.lb_RunStatus.Text = ex.Message;
  141. // }
  142. //}
  143. //private void btn_nextImage_Click(object sender, EventArgs e)
  144. //{
  145. // try
  146. // {
  147. // HObject image = new HObject();
  148. // Button btnClick = sender as Button;
  149. // if(btnClick.Name == "btn_nextImage")
  150. // {
  151. // myHalconTool.currentImageIndex = myHalconTool.currentImageIndex + 1;
  152. // }
  153. // else
  154. // {
  155. // myHalconTool.currentImageIndex = myHalconTool.currentImageIndex - 1;
  156. // }
  157. // if (myHalconTool.currentImageIndex > myHalconTool.L_imageFile.Count - 1)
  158. // {
  159. // myHalconTool.currentImageIndex = 0;
  160. // }
  161. // try
  162. // {
  163. // myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
  164. // }
  165. // catch
  166. // {
  167. // lb_RunStatus.Text = "图像文件异常或路径不合法";
  168. // lb_RunStatus.BackColor = Color.Red;
  169. // return;
  170. // }
  171. // myHalconTool.DispImage();
  172. // myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
  173. // Instance.lbl_imageName.Text = myHalconTool.currentImageName;
  174. // Instance.lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张";
  175. // }
  176. // catch (Exception ex)
  177. // {
  178. // lb_RunStatus.Text = ex.Message;
  179. // lb_RunStatus.BackColor = Color.Red;
  180. // }
  181. //}
  182. // 窗体载入时还原参数
  183. public void InitTool()
  184. {
  185. chbRGB2Gray.Checked = myHalconTool.RGBToGray;
  186. if(myHalconTool.workMode == WorkMode.ReadOneImage)
  187. {
  188. gbSignalImg.Enabled = true;
  189. gbMultImg.Enabled = false;
  190. txbFilePath.Text = myHalconTool.imagePath;
  191. }
  192. else
  193. {
  194. gbSignalImg.Enabled = false;
  195. gbMultImg.Enabled = true;
  196. tbxImageDirectory.Text = myHalconTool.imageDirectoryPath;
  197. lbImageName.Text = myHalconTool.currentImageName;
  198. }
  199. }
  200. /// <summary>
  201. /// 将数据传递给HalconToolInterface
  202. /// </summary>
  203. private void ParamsTrans()
  204. {
  205. myToolInfo.toolOutput[0] = new ToolIO("OutputImage", myHalconTool.outputImage, DataType.Image);
  206. }
  207. private void btnSelectFilePath_Click(object sender, EventArgs e)
  208. {
  209. HTuple channelCount = 0;
  210. OpenFileDialog dig_openImage = new OpenFileDialog();
  211. dig_openImage.Title = "请选择图像文件路径";
  212. dig_openImage.Filter = "图像文件(*.*)|*.*|图像文件(*.png)|*.png|图像文件(*.jpg)|*.jpg|图像文件(*.tif)|*.tif";
  213. if (dig_openImage.ShowDialog() == DialogResult.OK)
  214. {
  215. myHalconTool.imagePath = dig_openImage.FileName;
  216. myHalconTool.outputImageFilePath = dig_openImage.FileName;
  217. txbFilePath.Text = dig_openImage.FileName;
  218. }
  219. }
  220. private void btnRun_Click(object sender, EventArgs e)
  221. {
  222. if (File.Exists(txbFilePath.Text))
  223. {
  224. myHalconTool.outputImageFilePath = txbFilePath.Text;
  225. myHalconTool.imagePath = txbFilePath.Text;
  226. myHalconTool.Run(SoftwareRunState.Debug);
  227. ParamsTrans();
  228. }
  229. else
  230. {
  231. MessageBox.Show("文件不存在,请检查!");
  232. }
  233. }
  234. private void txbFilePath_TextChanged(object sender, EventArgs e)
  235. {
  236. myHalconTool.outputImageFilePath = txbFilePath.Text;
  237. myHalconTool.imagePath = txbFilePath.Text;
  238. }
  239. private void chbRGB2Gray_CheckedChanged(object sender, EventArgs e)
  240. {
  241. myHalconTool.RGBToGray = chbRGB2Gray.Checked;
  242. }
  243. private void ImageSource_Click(object sender, EventArgs e)
  244. {
  245. UIGroupBox myGroupBox = (UIGroupBox)sender;
  246. if (myGroupBox.Text == "单张图像")
  247. {
  248. if(myGroupBox.Enabled == true)
  249. {
  250. gbSignalImg.Enabled = false;
  251. gbMultImg.Enabled = true;
  252. myHalconTool.workMode = WorkMode.ReadMultImage;
  253. }
  254. }
  255. else
  256. {
  257. if (myGroupBox.Enabled == true)
  258. {
  259. gbSignalImg.Enabled = true;
  260. gbMultImg.Enabled = false;
  261. myHalconTool.workMode = WorkMode.ReadOneImage;
  262. }
  263. }
  264. }
  265. private void btnSelectDir_Click(object sender, EventArgs e)
  266. {
  267. FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog();
  268. if (Directory.Exists(myHalconTool.imageDirectoryPath))
  269. folderBrowseDialog.SelectedPath = myHalconTool.imageDirectoryPath;
  270. folderBrowseDialog.Description = "请选择图像文件夹路径";
  271. if (folderBrowseDialog.ShowDialog() == DialogResult.OK)
  272. {
  273. myHalconTool.imageDirectoryPath = folderBrowseDialog.SelectedPath;
  274. this.tbxImageDirectory.Text = myHalconTool.imageDirectoryPath;
  275. myHalconTool.L_imageFile.Clear();
  276. string[] files = Directory.GetFiles(folderBrowseDialog.SelectedPath);
  277. for (int i = 0; i < files.Length; i++)
  278. {
  279. FileInfo fileInfo = new FileInfo(files[i]);
  280. if (fileInfo.Extension == ".jpg" || fileInfo.Extension == ".bmp" || fileInfo.Extension == ".png" || fileInfo.Extension == ".tif")
  281. myHalconTool.L_imageFile.Add(files[i]);
  282. }
  283. if (myHalconTool.L_imageFile.Count > 0)
  284. {
  285. myHalconTool.currentImageIndex = 0;
  286. myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
  287. myHalconTool.DispImage();
  288. myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
  289. lbImageName.Text = myHalconTool.currentImageName;
  290. }
  291. // lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张";
  292. }
  293. }
  294. public void btnNext_Click(object sender, EventArgs e)
  295. {
  296. if (myHalconTool.L_imageFile.Count > 0)
  297. {
  298. int oldIndex = myHalconTool.currentImageIndex;
  299. if(++myHalconTool.currentImageIndex < myHalconTool.L_imageFile.Count)
  300. {
  301. myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
  302. myHalconTool.Run(SoftwareRunState.Debug);
  303. myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
  304. lbImageName.Text = myHalconTool.currentImageName;
  305. }
  306. else
  307. {
  308. myHalconTool.currentImageIndex = oldIndex;
  309. }
  310. }
  311. }
  312. private void btnOld_Click(object sender, EventArgs e)
  313. {
  314. if (myHalconTool.L_imageFile.Count > 0)
  315. {
  316. int oldIndex = myHalconTool.currentImageIndex;
  317. if (--myHalconTool.currentImageIndex >= 0)
  318. {
  319. myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
  320. myHalconTool.Run(SoftwareRunState.Debug);
  321. myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
  322. lbImageName.Text = myHalconTool.currentImageName;
  323. }
  324. else
  325. {
  326. myHalconTool.currentImageIndex = oldIndex;
  327. }
  328. }
  329. }
  330. }
  331. }