2022-03-21 14:48:26 +08:00
|
|
|
|
using System;
|
2021-03-17 16:08:13 +08:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
|
using System.Data;
|
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
using CommonMethods;
|
|
|
|
|
|
using HalconDotNet;
|
|
|
|
|
|
using ChoiceTech.Halcon.Control;
|
|
|
|
|
|
using ViewROI;
|
2022-04-21 14:10:04 +08:00
|
|
|
|
using Sunny.UI;
|
2021-03-17 16:08:13 +08:00
|
|
|
|
|
|
|
|
|
|
namespace HalconTool
|
|
|
|
|
|
{
|
|
|
|
|
|
public partial class FormHalconTool : Form
|
|
|
|
|
|
{
|
|
|
|
|
|
public HalconTool myHalconTool = null;
|
|
|
|
|
|
public IToolInfo myToolInfo = null;
|
|
|
|
|
|
public HWindowTool_Smart myHwindow = new HWindowTool_Smart();
|
|
|
|
|
|
public FormHalconTool(ref object halconTool)
|
|
|
|
|
|
{
|
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
// 若窗体还未被初始化,则此时仍是object类型,就无法对类型强转
|
|
|
|
|
|
if (halconTool.GetType().FullName != "System.Object")
|
|
|
|
|
|
{
|
|
|
|
|
|
myToolInfo = (IToolInfo)halconTool;
|
|
|
|
|
|
myHalconTool = (HalconTool)myToolInfo.tool;
|
|
|
|
|
|
}
|
|
|
|
|
|
_instance = this;
|
|
|
|
|
|
}
|
|
|
|
|
|
private static readonly object lockObkect = new object();
|
|
|
|
|
|
private static FormHalconTool _instance;
|
|
|
|
|
|
public static FormHalconTool Instance
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
if(_instance == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
lock (lockObkect)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_instance == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
object halconTool = new object();
|
|
|
|
|
|
_instance = new FormHalconTool(ref halconTool);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return _instance;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2022-04-08 15:31:57 +08:00
|
|
|
|
//private void rdo_readMultImage_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// if (rdo_readOneImage.Checked)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// this.ckb_autoSwitch.Visible = false;
|
|
|
|
|
|
// this.panelOneImage.Visible = true;
|
|
|
|
|
|
// this.panelMultImage.Visible = false;
|
|
|
|
|
|
// this.btn_browseImage.Visible = false;
|
|
|
|
|
|
// myHalconTool.workMode = WorkMode.ReadOneImage;
|
|
|
|
|
|
// myHalconTool.outputImageFilePath = myHalconTool.imagePath;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if(myHalconTool.L_imageFile.Count > 0)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// this.ckb_autoSwitch.Visible = true;
|
|
|
|
|
|
// this.panelMultImage.Visible = true;
|
|
|
|
|
|
// this.panelOneImage.Visible = false;
|
|
|
|
|
|
// this.btn_browseImage.Visible = true;
|
|
|
|
|
|
// myHalconTool.workMode = WorkMode.ReadMultImage;
|
|
|
|
|
|
// myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// btn_runHalconInterfaceTool_Click(null, null);
|
|
|
|
|
|
//}
|
2021-03-17 16:08:13 +08:00
|
|
|
|
|
|
|
|
|
|
private void FormHalconTool_Load(object sender, EventArgs e)
|
|
|
|
|
|
{
|
2022-04-08 15:31:57 +08:00
|
|
|
|
gbImageDisp.Controls.Add(myHwindow);
|
2021-03-17 16:08:13 +08:00
|
|
|
|
myHwindow.Dock = DockStyle.Fill;
|
|
|
|
|
|
InitTool();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-04-08 15:31:57 +08:00
|
|
|
|
//private void btn_readImage_Click(object sender, EventArgs e)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// myHalconTool.ReadImage(out myHalconTool.imagePath);
|
|
|
|
|
|
// this.tbx_imagePath.Text = myHalconTool.imagePath;
|
|
|
|
|
|
// btn_runHalconInterfaceTool_Click(null, null);
|
|
|
|
|
|
//}
|
2021-03-17 16:08:13 +08:00
|
|
|
|
|
2022-04-08 15:31:57 +08:00
|
|
|
|
//private void btn_runHalconInterfaceTool_Click(object sender, EventArgs e)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// if(myHalconTool.workMode == WorkMode.ReadOneImage)
|
|
|
|
|
|
// {
|
2021-03-17 16:08:13 +08:00
|
|
|
|
|
2022-04-08 15:31:57 +08:00
|
|
|
|
// }
|
|
|
|
|
|
// if(myHalconTool.workMode == WorkMode.ReadMultImage)
|
|
|
|
|
|
// {
|
2021-03-17 16:08:13 +08:00
|
|
|
|
|
2022-04-08 15:31:57 +08:00
|
|
|
|
// }
|
|
|
|
|
|
// if (File.Exists(this.tbx_imagePath.Text))
|
|
|
|
|
|
// {
|
|
|
|
|
|
// myHalconTool.Run(SoftwareRunState.Debug);
|
|
|
|
|
|
// myHalconTool.imagePath = tbx_imagePath.Text;
|
|
|
|
|
|
// ParamsTrans();
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//private void btn_selectImageDirectory_Click(object sender, EventArgs e)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// myHalconTool.imageDirectoryPath = string.Empty;
|
|
|
|
|
|
// try
|
|
|
|
|
|
// {
|
|
|
|
|
|
// FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog();
|
|
|
|
|
|
// if (Directory.Exists(myHalconTool.imageDirectoryPath))
|
|
|
|
|
|
// folderBrowseDialog.SelectedPath = myHalconTool.imageDirectoryPath;
|
|
|
|
|
|
// folderBrowseDialog.Description = "请选择图像文件夹路径";
|
|
|
|
|
|
// if (folderBrowseDialog.ShowDialog() == DialogResult.OK)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// myHalconTool.imageDirectoryPath = folderBrowseDialog.SelectedPath;
|
|
|
|
|
|
// this.tbx_imageDirectory.Text = myHalconTool.imageDirectoryPath;
|
|
|
|
|
|
// myHalconTool.L_imageFile.Clear();
|
|
|
|
|
|
// string[] files = Directory.GetFiles(folderBrowseDialog.SelectedPath);
|
|
|
|
|
|
// for (int i = 0; i < files.Length; i++)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// FileInfo fileInfo = new FileInfo(files[i]);
|
|
|
|
|
|
// if (fileInfo.Extension == ".jpg" || fileInfo.Extension == ".bmp" || fileInfo.Extension == ".png" || fileInfo.Extension == ".tif")
|
|
|
|
|
|
// myHalconTool.L_imageFile.Add(files[i]);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if (myHalconTool.L_imageFile.Count > 0)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// myHalconTool.currentImageIndex = 0;
|
|
|
|
|
|
// myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
|
|
|
|
|
|
// myHalconTool.DispImage();
|
|
|
|
|
|
// myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[0]);
|
|
|
|
|
|
// lbl_imageName.Text = myHalconTool.currentImageName;
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
// lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张";
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// catch (Exception ex)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// this.lb_RunStatus.Text = ex.Message;
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
2021-03-17 16:08:13 +08:00
|
|
|
|
|
2022-04-08 15:31:57 +08:00
|
|
|
|
//private void btn_nextImage_Click(object sender, EventArgs e)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// try
|
|
|
|
|
|
// {
|
|
|
|
|
|
// HObject image = new HObject();
|
|
|
|
|
|
// Button btnClick = sender as Button;
|
|
|
|
|
|
// if(btnClick.Name == "btn_nextImage")
|
|
|
|
|
|
// {
|
|
|
|
|
|
// myHalconTool.currentImageIndex = myHalconTool.currentImageIndex + 1;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else
|
|
|
|
|
|
// {
|
|
|
|
|
|
// myHalconTool.currentImageIndex = myHalconTool.currentImageIndex - 1;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// if (myHalconTool.currentImageIndex > myHalconTool.L_imageFile.Count - 1)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// myHalconTool.currentImageIndex = 0;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// try
|
|
|
|
|
|
// {
|
|
|
|
|
|
// myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
|
|
|
|
|
|
// }
|
|
|
|
|
|
// catch
|
|
|
|
|
|
// {
|
|
|
|
|
|
// lb_RunStatus.Text = "图像文件异常或路径不合法";
|
|
|
|
|
|
// lb_RunStatus.BackColor = Color.Red;
|
|
|
|
|
|
// return;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// myHalconTool.DispImage();
|
|
|
|
|
|
// myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
|
|
|
|
|
|
// Instance.lbl_imageName.Text = myHalconTool.currentImageName;
|
|
|
|
|
|
// Instance.lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张";
|
|
|
|
|
|
// }
|
|
|
|
|
|
// catch (Exception ex)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// lb_RunStatus.Text = ex.Message;
|
|
|
|
|
|
// lb_RunStatus.BackColor = Color.Red;
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
// 窗体载入时还原参数
|
2021-03-17 16:08:13 +08:00
|
|
|
|
public void InitTool()
|
|
|
|
|
|
{
|
2022-04-08 15:31:57 +08:00
|
|
|
|
chbRGB2Gray.Checked = myHalconTool.RGBToGray;
|
2022-04-21 14:10:04 +08:00
|
|
|
|
if(myHalconTool.workMode == WorkMode.ReadOneImage)
|
|
|
|
|
|
{
|
|
|
|
|
|
gbSignalImg.Enabled = true;
|
|
|
|
|
|
gbMultImg.Enabled = false;
|
|
|
|
|
|
txbFilePath.Text = myHalconTool.imagePath;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
gbSignalImg.Enabled = false;
|
|
|
|
|
|
gbMultImg.Enabled = true;
|
|
|
|
|
|
tbxImageDirectory.Text = myHalconTool.imageDirectoryPath;
|
|
|
|
|
|
lbImageName.Text = myHalconTool.currentImageName;
|
|
|
|
|
|
}
|
2021-03-17 16:08:13 +08:00
|
|
|
|
}
|
2022-04-08 15:31:57 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 将数据传递给HalconToolInterface
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void ParamsTrans()
|
2021-03-17 16:08:13 +08:00
|
|
|
|
{
|
2022-04-08 15:31:57 +08:00
|
|
|
|
myToolInfo.toolOutput[0] = new ToolIO("OutputImage", myHalconTool.outputImage, DataType.Image);
|
|
|
|
|
|
}
|
2021-03-17 16:08:13 +08:00
|
|
|
|
|
2022-04-08 15:31:57 +08:00
|
|
|
|
private void btnSelectFilePath_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
HTuple channelCount = 0;
|
|
|
|
|
|
OpenFileDialog dig_openImage = new OpenFileDialog();
|
|
|
|
|
|
dig_openImage.Title = "请选择图像文件路径";
|
|
|
|
|
|
dig_openImage.Filter = "图像文件(*.*)|*.*|图像文件(*.png)|*.png|图像文件(*.jpg)|*.jpg|图像文件(*.tif)|*.tif";
|
|
|
|
|
|
if (dig_openImage.ShowDialog() == DialogResult.OK)
|
2021-03-17 16:08:13 +08:00
|
|
|
|
{
|
2022-04-08 15:31:57 +08:00
|
|
|
|
myHalconTool.imagePath = dig_openImage.FileName;
|
|
|
|
|
|
myHalconTool.outputImageFilePath = dig_openImage.FileName;
|
|
|
|
|
|
txbFilePath.Text = dig_openImage.FileName;
|
2021-03-17 16:08:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-04-08 15:31:57 +08:00
|
|
|
|
private void btnRun_Click(object sender, EventArgs e)
|
2021-03-17 16:08:13 +08:00
|
|
|
|
{
|
2022-04-08 15:31:57 +08:00
|
|
|
|
if (File.Exists(txbFilePath.Text))
|
2021-03-17 16:08:13 +08:00
|
|
|
|
{
|
2022-04-08 15:31:57 +08:00
|
|
|
|
myHalconTool.outputImageFilePath = txbFilePath.Text;
|
|
|
|
|
|
myHalconTool.imagePath = txbFilePath.Text;
|
|
|
|
|
|
myHalconTool.Run(SoftwareRunState.Debug);
|
|
|
|
|
|
ParamsTrans();
|
2021-03-17 16:08:13 +08:00
|
|
|
|
}
|
2022-04-08 15:31:57 +08:00
|
|
|
|
else
|
2021-03-17 16:08:13 +08:00
|
|
|
|
{
|
2022-04-08 15:31:57 +08:00
|
|
|
|
MessageBox.Show("文件不存在,请检查!");
|
2021-03-17 16:08:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-04-08 15:31:57 +08:00
|
|
|
|
private void txbFilePath_TextChanged(object sender, EventArgs e)
|
2021-03-17 16:08:13 +08:00
|
|
|
|
{
|
2022-04-08 15:31:57 +08:00
|
|
|
|
myHalconTool.outputImageFilePath = txbFilePath.Text;
|
|
|
|
|
|
myHalconTool.imagePath = txbFilePath.Text;
|
2021-03-17 16:08:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-04-08 15:31:57 +08:00
|
|
|
|
private void chbRGB2Gray_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
myHalconTool.RGBToGray = chbRGB2Gray.Checked;
|
|
|
|
|
|
}
|
2022-04-21 14:10:04 +08:00
|
|
|
|
|
|
|
|
|
|
private void ImageSource_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
UIGroupBox myGroupBox = (UIGroupBox)sender;
|
|
|
|
|
|
if (myGroupBox.Text == "单张图像")
|
|
|
|
|
|
{
|
|
|
|
|
|
if(myGroupBox.Enabled == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
gbSignalImg.Enabled = false;
|
|
|
|
|
|
gbMultImg.Enabled = true;
|
|
|
|
|
|
myHalconTool.workMode = WorkMode.ReadMultImage;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (myGroupBox.Enabled == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
gbSignalImg.Enabled = true;
|
|
|
|
|
|
gbMultImg.Enabled = false;
|
|
|
|
|
|
myHalconTool.workMode = WorkMode.ReadOneImage;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void btnSelectDir_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog();
|
|
|
|
|
|
if (Directory.Exists(myHalconTool.imageDirectoryPath))
|
|
|
|
|
|
folderBrowseDialog.SelectedPath = myHalconTool.imageDirectoryPath;
|
|
|
|
|
|
folderBrowseDialog.Description = "请选择图像文件夹路径";
|
|
|
|
|
|
if (folderBrowseDialog.ShowDialog() == DialogResult.OK)
|
|
|
|
|
|
{
|
|
|
|
|
|
myHalconTool.imageDirectoryPath = folderBrowseDialog.SelectedPath;
|
|
|
|
|
|
this.tbxImageDirectory.Text = myHalconTool.imageDirectoryPath;
|
|
|
|
|
|
myHalconTool.L_imageFile.Clear();
|
|
|
|
|
|
string[] files = Directory.GetFiles(folderBrowseDialog.SelectedPath);
|
|
|
|
|
|
for (int i = 0; i < files.Length; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
FileInfo fileInfo = new FileInfo(files[i]);
|
|
|
|
|
|
if (fileInfo.Extension == ".jpg" || fileInfo.Extension == ".bmp" || fileInfo.Extension == ".png" || fileInfo.Extension == ".tif")
|
|
|
|
|
|
myHalconTool.L_imageFile.Add(files[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (myHalconTool.L_imageFile.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
myHalconTool.currentImageIndex = 0;
|
|
|
|
|
|
myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
|
|
|
|
|
|
myHalconTool.DispImage();
|
|
|
|
|
|
myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
|
|
|
|
|
|
lbImageName.Text = myHalconTool.currentImageName;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
// lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张";
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void btnNext_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (myHalconTool.L_imageFile.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
int oldIndex = myHalconTool.currentImageIndex;
|
|
|
|
|
|
if(++myHalconTool.currentImageIndex < myHalconTool.L_imageFile.Count)
|
|
|
|
|
|
{
|
|
|
|
|
|
myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
|
|
|
|
|
|
myHalconTool.Run(SoftwareRunState.Debug);
|
|
|
|
|
|
myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
|
|
|
|
|
|
lbImageName.Text = myHalconTool.currentImageName;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
myHalconTool.currentImageIndex = oldIndex;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void btnOld_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (myHalconTool.L_imageFile.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
int oldIndex = myHalconTool.currentImageIndex;
|
|
|
|
|
|
if (--myHalconTool.currentImageIndex >= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
|
|
|
|
|
|
myHalconTool.Run(SoftwareRunState.Debug);
|
|
|
|
|
|
myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
|
|
|
|
|
|
lbImageName.Text = myHalconTool.currentImageName;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
myHalconTool.currentImageIndex = oldIndex;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2021-03-17 16:08:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|