using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using CommonMethods;
using HalconDotNet;
using ToolBase;
using System.Diagnostics;
using ViewROI;
using System.IO;
namespace HalconTool
{
[Serializable]
public class HalconTool: IToolBase
{
///
/// 流程名
///
public string jobName = string.Empty;
///
/// 曝光时间
///
public Int32 exposure = 5;
///
/// 图像的获取方式
///
public ImageSourceMode imageSourceMode = ImageSourceMode.FormDevice;
///
/// 是否处于实时采集模式
///
public bool realTimeMode = false;
///
/// 相机句柄
///
public Int64 cameraHandle = -1;
///
/// 设备信息字符串,包括了相机SN、品牌等信息
///
public string deviceInfoStr = string.Empty;
///
/// 实时采集线程
///
public static Thread th_acq ; //Thread类不能序列化,所以申明为静态的
///
/// 读取文件夹图像模式时每次运行是否自动切换图像
///
public bool autoSwitch = true;
///
/// 是否将彩色图像转化成灰度图像
///
public bool RGBToGray = true;
///
/// 工作模式为读取文件夹图像时,当前图像的名称
///
public string currentImageName = "";
///
/// 工作模式为读取文件夹图像时,当前显示的图片的索引
///
public int currentImageIndex = 0;
///
/// 文件夹中的图像文件集合
///
public List L_imageFile = new List();
///
/// 单张图像的文件路径
///
public string imagePath = string.Empty;
///
/// 图像文件夹路径
///
public string imageDirectoryPath = string.Empty;
///
/// 输出图像
///
[NonSerialized]
public HObject outputImage = new HObject();
///
/// 输出图像的路径
///
public string outputImageFilePath = null;
///
/// 读取单张图像或批量读取文件夹图像工作模式
///
internal WorkMode workMode = WorkMode.ReadMultImage;
public override void Run(SoftwareRunState softwareState)
{
Stopwatch sw = new Stopwatch();
sw.Restart();
softwareRunState = softwareState;
if(workMode == WorkMode.ReadOneImage)
{
DispImage();
}
else
{
if (currentImageIndex <= L_imageFile.Count && L_imageFile.Count != 0)
{
currentImageIndex = currentImageIndex == L_imageFile.Count ? 0 : currentImageIndex;
outputImageFilePath = L_imageFile[currentImageIndex];
DispImage();
currentImageName = Path.GetFileName(L_imageFile[currentImageIndex]);
if(softwareState == SoftwareRunState.Release)
currentImageIndex++;
}
}
SetToolStatusDisp();
sw.Stop();
runTime = $"工具运行时间:{sw.ElapsedMilliseconds.ToString()} ms";
}
public override void DispImage()
{
HObject image = new HObject();
try
{
if(outputImageFilePath != null && outputImageFilePath != "")
{
HOperatorSet.ReadImage(out image, outputImageFilePath);
if (RGBToGray)
{
HTuple channel;
HOperatorSet.CountChannels(image, out channel);
if (channel == 3)
HOperatorSet.Rgb1ToGray(image, out image);
}
outputImage = image;
}
else
{
runMessage = $"图像文件路径为空!";
toolRunStatu = ToolRunStatu.File_Error_Or_Path_Invalid;
return;
}
}
catch(Exception ex)
{
if(softwareRunState == SoftwareRunState.Debug)
{
runMessage = $"图像文件异常或路径不合法{ex}";
toolRunStatu = ToolRunStatu.File_Error_Or_Path_Invalid;
}
return;
}
if (outputImage != null)
{
if (softwareRunState == SoftwareRunState.Debug)
{
FormHalconTool.Instance.myHwindow.DispImage(outputImage);
}
}
else
{
runMessage = $"图像为空!";
toolRunStatu = ToolRunStatu.Lack_Of_Input_Image;
return;
}
toolRunStatu = ToolRunStatu.Succeed;
}
public void SetToolStatusDisp()
{
FormHalconTool.Instance.lb_RunStatus.Text = toolRunStatu == ToolRunStatu.Succeed ? "工具运行成功!" : $"工具运行异常, 异常原因:{runMessage}";
FormHalconTool.Instance.lb_RunTime.Text = runTime;
if (toolRunStatu == ToolRunStatu.Succeed)
{
FormHalconTool.Instance.statusStrip.BackColor = System.Drawing.Color.LimeGreen;
}
else
{
FormHalconTool.Instance.statusStrip.BackColor = System.Drawing.Color.Red;
}
}
public override void DispMainWindow(HWindowTool_Smart window)
{
throw new NotImplementedException();
}
}
}