C3031
2026-01-30 22ff831583da8c6f1c015c1e294f0bc1ef70ac85
已修改9个文件
1114 ■■■■■ 文件已修改
LB_SmartVision/VisionForm.Designer.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/VisionForm.resx 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.Designer.cs 498 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.cs 454 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.resx 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/ProcessEditForm.cs 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/VisionForm.Designer.cs
@@ -89,7 +89,7 @@
            // 
            sc_VisionForm.Panel2.Controls.Add(grb_Info);
            sc_VisionForm.Size = new Size(1416, 781);
            sc_VisionForm.SplitterDistance = 592;
            sc_VisionForm.SplitterDistance = 591;
            sc_VisionForm.SplitterWidth = 5;
            sc_VisionForm.TabIndex = 1;
            // 
@@ -108,7 +108,7 @@
            tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Absolute, 60F));
            tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Absolute, 39F));
            tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tlp_MainView.Size = new Size(1416, 592);
            tlp_MainView.Size = new Size(1416, 591);
            tlp_MainView.TabIndex = 1;
            tlp_MainView.TagString = null;
            // 
@@ -122,7 +122,7 @@
            materialTabControl.MouseState = MaterialSkin.MouseState.HOVER;
            materialTabControl.Name = "materialTabControl";
            materialTabControl.SelectedIndex = 0;
            materialTabControl.Size = new Size(1412, 489);
            materialTabControl.Size = new Size(1412, 488);
            materialTabControl.TabIndex = 0;
            // 
            // tlp_VisionMainOperator
@@ -249,7 +249,7 @@
            grb_Info.MinimumSize = new Size(1, 1);
            grb_Info.Name = "grb_Info";
            grb_Info.Padding = new Padding(0, 40, 0, 0);
            grb_Info.Size = new Size(1416, 184);
            grb_Info.Size = new Size(1416, 185);
            grb_Info.TabIndex = 1;
            grb_Info.Text = "日志显示区:";
            grb_Info.TextAlignment = ContentAlignment.MiddleLeft;
@@ -265,7 +265,7 @@
            rich_Info.Name = "rich_Info";
            rich_Info.Padding = new Padding(2);
            rich_Info.ShowText = false;
            rich_Info.Size = new Size(1416, 144);
            rich_Info.Size = new Size(1416, 145);
            rich_Info.TabIndex = 0;
            rich_Info.TextAlignment = ContentAlignment.MiddleLeft;
            // 
LB_SmartVision/VisionForm.resx
@@ -121,24 +121,24 @@
  <data name="theme_VisionForm.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
        vAAADrwBlbxySQAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        BkVBUPCBCEG8BXNQ48GLeImCehIJxMsqhsSZruod46K4HtSIGjU+4iOr0c1I9fSsM3/PLNtCPO0H36m/
        evz/X11VnreKVRTAHPOZumkY6lFwqURws3BwZ8ywTQnuiCP/+iTCzY1qaUPzdm/Atf3PaHre6XPsjyQM
        2xLGV4XwIyX4QRj+UMK/lPFvJTyhBMeV8IgQvmRJuH4Ko+l5p9UjGBbCJ5RxTgj+VMZmXxKcSAjekHE/
        NNs5DgaTKLinEQYVO4Trf1mkV81wixLUslPmA3bzF2XcKeP+hWY/u3n0fCXcrQwLyjAvjNsb1dI6N05P
        mFAIHlHG73sEypPgGwnhfpn0zzH7jzddcK4Q7kqfKNMI4a9K+MwBDgbdeF04MBWsFYYdQvhbLlBvfhKT
        f+vMtLfG7C0JJXxKGY67WnvCmPAFGRs7z42boul5AzHBfdK6TjdQtzPGk8oos5F/5Y7sfVvPhg+lp+1h
        0yIsxARPmtaN78WEl8eEX+SNclxUhne0glUrNrN9zfMGlPAuZTzaQ99FYfwuDv3ruoLvq5bWaQSvZCfL
        GXUYLwrj240Qxtu2lkSN4FpdWfKZH9jb9RQ1Cq62f9sVOlxUxn3KQXnJ0PO8QxU/jBm1h74v7ZniEG9K
        Hdg/quzvXO709k0Y3u08ucGqWgheX862H4XgxbR47SqU8D1X0EXC2VmGizqDz0xPr0kYH9eO360gNe0b
        jWppozB+1kOQEb5MCLa0C64NoeGrhOGrvH6lhK81GiIvnggmrDLzgvTkvwvDA+5wsU4nhG/m9AUoBD/F
        HFzWN4H0XQn2vF8eXN8Z3FAPYasl59oUYjuB+sTImDB+nhfgYQ39STf4fmu1DHtz+oIUgiM1KkWtwcFw
        sOujVT3hrnaL7UQc+hcL5W+sKIXhw0OVjaW0iwnBc47gqIQ45QY32PKRzv8eTguRYM9SS5YouEEZjv37
        EffbzbjBDdZyxZYQ12EB2qS0bWrJqRVazPDWkojwZbuZrsgZtDJ0iY1g12khEtTicMTvclwn2CKE32YJ
        7G5PORfZ1HtMCH7MOV4BrQ3XCe92+4onk5Nn2PolDAvWXnuOzAwzo6Nnx4Q3SrojwqfKeMxWMpsXWVs+
        2WrfKRdbW1W6Hf0shM/33Y7my4PrleFZIfhAaWjU/e5ivlw+y3S2FySMtynjvcrwsFiLJv/RhPBB2ws1
        hK2WcBLBFf1qawlplwvxaQlxe786OOU4PBWsjSO85mBlQ8n99r/BisSdAas4FfgHpdEUZpwUX7sAAAAA
        SUVORK5CYII=
        vAAADrwBlbxySQAAA+xJREFUWEftV0loFUkYbvcNFzJi0lWdBEPQruqXKEYdcRgz4AYqeplBwYiXEUVB
        UHAhCEG8iR509OBlmIsOjJ5EBvQSRVHzuvslxjAy8eCG+75GozF+f716L6873fqe2ykffDR59e9/1V8V
        ow99KARtUg72J5aypGNN8xy2yJPWcleylb5gS13HnJdy+KSW6uJx3b8ZA7TKl6PbMPq3SbMsBUcpyf/2
        BP8PDh96kr32BX/rS/4O30789grfO1j/k4LQ6p8POO6XdFgpDNbDSZsn2Bt8u2MpWGdKsCPeBNMm3TZp
        FaUc6/cW20pQEtpsflCllmwxjDbpLKOd9vAZuBPOx5J+86TyMdDbBxsdYLsn+SpUZYQy/imQILLdBIP3
        cxzEU7Dbns3WejXmcNK/NPGHkajabtUiLYO/nyOgXWdRFeUkDmdnWMOg2ACFFwEn8fzfFeaSxlpjIOlT
        EHC0HVm/CstSC13B93sVFaOVszDQpwGuYGtQLipnQDlMyLzH12t2zJ8adH/TbeMbVLYROmmyDvjYRrLK
        aS4Q3Y/gtWjFALtg6KSf4NW02Uj3HwSPzOuw9iAk24sI/p5rm3OV0wyOo+++ww7pzCIViVjvAk+02GyC
        VlWnpUmw2Qggn+AV0eZ/A61oEtYsOttRwjlE5vy4L61KrabQmjBtV3I/JPtRUptcmy9UBuiM+tLc+bHs
        aQ1Rn8rNnEC7Gpvr8KcqF0XoHVCbl0qB8p2OEspS8OZmySZrvwqNtbUDMRm3Yj9kj1uB9NXcwLkfjwyu
        RAhoshuYcHMyGy4DT5T+jKrcjNbJh+yW75QIw62yqhDAvUghwV/Cybrw5UKTDn08GqmTJ9GCx660pscG
        oPoq2MHzlUWjtN8skjZbRsGFdQpiJoBkVVkFnF3tLcCv+7ZZo31mcYZGLY5RL/kCiQrcaRLFTvrikOxc
        YJF2PeZ5ZsTmAkNkCtaiW1YAkcTF1sT4YjXFEM3ekMADz+YztM8AULqlqE5nSL5wor3Zkew51nxU4WnP
        Ij9DlVGLIWCtDhV6FzBWIJH9a3pNaZOGQRsNT6tjWSHB/6LK6OUA/ETJVER/O9dgwcQ7w7XLTG0yjSTO
        Onp7Ny3A92VuuTD0rbcFbXsUMJonaQwnBV8Rniu4y2sGYbEe5emA8cORV6ZGY3n5UNycC9AKvBHZZRh+
        iqxoX9BlRWMZozvLLiSEV5V6HT2Bjz9iX0ftaAWE9sDoBV+UlOufY9FeWTmE5OhdgLH8Kxyvhv5GON3q
        C3NzSvD19C70MTco4JTDZsbtrSzUlLP5DnBV3D745riOp5nr8F/OJcYV65++P2iTfNV/MPoQCcP4AKXR
        FGYxo/VGAAAAAElFTkSuQmCC
</value>
  </data>
  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs
@@ -3843,7 +3843,7 @@
        /// <param name="hv_Column1">起始横坐标</param>
        /// <param name="hv_Row2">结束纵坐标</param>
        /// <param name="hv_Column2">结束横坐标</param>
        public static void Emphsize(HObject ho_Image, out HObject ho_OutImage, HTuple hv_ImageEnhancementType, HTuple hv_Wid, HTuple hv_High, HTuple hv_Fac)
        public static void ImageEnhancement(HObject ho_Image, out HObject ho_OutImage, HTuple hv_ImageEnhancementType, HTuple hv_Wid, HTuple hv_High, HTuple hv_Fac)
        {
            HOperatorSet.GenEmptyObj(out ho_OutImage);
            try
@@ -3867,19 +3867,14 @@
                {
                    hv_ImageEnhancementTypeOut.Dispose();
                    hv_ImageEnhancementTypeOut = "equHisto";
                    HOperatorSet.ScaleImageMax(ho_Image, out ho_OutImage);
                }
                else
                {
                    hv_ImageEnhancementTypeOut.Dispose();
                    hv_ImageEnhancementTypeOut = "scaleMax";
                }
                HOperatorSet.EquHistoImage(ho_Image, out ho_OutImage);
                }
                return;
            }
            catch (HalconException HDevExpDefaultException)
@@ -3888,44 +3883,6 @@
                hv_Wid.Dispose();
                hv_High.Dispose();
                throw HDevExpDefaultException;
            }
        }
        /// <summary>
        /// 图像增强算法-比例增强
        /// </summary>
        /// <param name="ho_Image">待测图片</param>
        /// <param name="hv_Wid">掩膜宽</param>
        public static void ScaleImageMax(HObject ho_Image, out HObject ho_OutImage)
        {
            HOperatorSet.GenEmptyObj(out ho_OutImage);
            try
            {
                ho_OutImage.Dispose();
                HOperatorSet.ScaleImageMax(ho_Image, out ho_OutImage);
                return;
            }
            catch (HalconException HDevExpDefaultException)
            {
                throw HDevExpDefaultException;
            }
        }
        /// <summary>
        /// 图像增强算法-直方图均衡化
        /// </summary>
        /// <param name="ho_Image">待测图片</param>
        /// <param name="hv_Wid">掩膜宽</param>
        public static void EquHistoImage(HObject ho_Image, out HObject ho_OutImage)
        {
            HOperatorSet.GenEmptyObj(out ho_OutImage);
            try
            {
                ho_OutImage.Dispose();
                HOperatorSet.EquHistoImage(ho_Image, out ho_OutImage);
                return;
            }
            catch (HalconException HDevExpDefaultException)
            {
                throw HDevExpDefaultException;
            }
        }
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs
@@ -302,7 +302,7 @@
            // 
            cmbTransition.FormattingEnabled = true;
            cmbTransition.Location = new Point(120, 184);
            cmbTransition.Margin = new Padding(4, 4, 4, 4);
            cmbTransition.Margin = new Padding(4);
            cmbTransition.Name = "cmbTransition";
            cmbTransition.Size = new Size(130, 28);
            cmbTransition.TabIndex = 13;
@@ -311,7 +311,7 @@
            // 
            cmbSelect.FormattingEnabled = true;
            cmbSelect.Location = new Point(376, 184);
            cmbSelect.Margin = new Padding(4, 4, 4, 4);
            cmbSelect.Margin = new Padding(4);
            cmbSelect.Name = "cmbSelect";
            cmbSelect.Size = new Size(131, 28);
            cmbSelect.TabIndex = 14;
@@ -320,7 +320,7 @@
            // 
            btnShowROI.Dock = DockStyle.Fill;
            btnShowROI.Location = new Point(4, 244);
            btnShowROI.Margin = new Padding(4, 4, 4, 4);
            btnShowROI.Margin = new Padding(4);
            btnShowROI.Name = "btnShowROI";
            btnShowROI.Size = new Size(108, 52);
            btnShowROI.TabIndex = 15;
@@ -332,7 +332,7 @@
            // 
            pnlInputImage.Dock = DockStyle.Fill;
            pnlInputImage.Location = new Point(4, 4);
            pnlInputImage.Margin = new Padding(5, 5, 5, 5);
            pnlInputImage.Margin = new Padding(5);
            pnlInputImage.Name = "pnlInputImage";
            pnlInputImage.Size = new Size(782, 603);
            pnlInputImage.TabIndex = 44;
@@ -418,7 +418,7 @@
            MainTableLayoutPanel.Controls.Add(imgTabControl, 1, 0);
            MainTableLayoutPanel.Dock = DockStyle.Fill;
            MainTableLayoutPanel.Location = new Point(0, 27);
            MainTableLayoutPanel.Margin = new Padding(4, 4, 4, 4);
            MainTableLayoutPanel.Margin = new Padding(4);
            MainTableLayoutPanel.Name = "MainTableLayoutPanel";
            MainTableLayoutPanel.RowCount = 1;
            MainTableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
@@ -432,7 +432,7 @@
            parasTabControl.Controls.Add(tabPage2);
            parasTabControl.Dock = DockStyle.Fill;
            parasTabControl.Location = new Point(4, 4);
            parasTabControl.Margin = new Padding(4, 4, 4, 4);
            parasTabControl.Margin = new Padding(4);
            parasTabControl.Name = "parasTabControl";
            parasTabControl.SelectedIndex = 0;
            parasTabControl.Size = new Size(528, 644);
@@ -442,9 +442,9 @@
            // 
            tabPage1.Controls.Add(tablePanelParas);
            tabPage1.Location = new Point(4, 29);
            tabPage1.Margin = new Padding(4, 4, 4, 4);
            tabPage1.Margin = new Padding(4);
            tabPage1.Name = "tabPage1";
            tabPage1.Padding = new Padding(4, 4, 4, 4);
            tabPage1.Padding = new Padding(4);
            tabPage1.Size = new Size(520, 611);
            tabPage1.TabIndex = 0;
            tabPage1.Text = "输入参数";
@@ -454,7 +454,7 @@
            // 
            tabPage5.Controls.Add(tableLayoutPanel2);
            tabPage5.Location = new Point(4, 29);
            tabPage5.Margin = new Padding(4, 4, 4, 4);
            tabPage5.Margin = new Padding(4);
            tabPage5.Name = "tabPage5";
            tabPage5.Size = new Size(520, 611);
            tabPage5.TabIndex = 2;
@@ -474,7 +474,7 @@
            tableLayoutPanel2.Controls.Add(cmbFixture, 1, 1);
            tableLayoutPanel2.Controls.Add(ckbDrawRoi, 2, 0);
            tableLayoutPanel2.Location = new Point(4, 4);
            tableLayoutPanel2.Margin = new Padding(4, 4, 4, 4);
            tableLayoutPanel2.Margin = new Padding(4);
            tableLayoutPanel2.Name = "tableLayoutPanel2";
            tableLayoutPanel2.RowCount = 8;
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
@@ -493,7 +493,7 @@
            cmbTypeRoi.Enabled = false;
            cmbTypeRoi.FormattingEnabled = true;
            cmbTypeRoi.Location = new Point(81, 4);
            cmbTypeRoi.Margin = new Padding(4, 4, 4, 4);
            cmbTypeRoi.Margin = new Padding(4);
            cmbTypeRoi.Name = "cmbTypeRoi";
            cmbTypeRoi.Size = new Size(154, 28);
            cmbTypeRoi.TabIndex = 1;
@@ -527,7 +527,7 @@
            // 
            cmbFixture.FormattingEnabled = true;
            cmbFixture.Location = new Point(81, 39);
            cmbFixture.Margin = new Padding(4, 4, 4, 4);
            cmbFixture.Margin = new Padding(4);
            cmbFixture.Name = "cmbFixture";
            cmbFixture.Size = new Size(154, 28);
            cmbFixture.TabIndex = 5;
@@ -538,7 +538,7 @@
            ckbDrawRoi.AutoSize = true;
            ckbDrawRoi.CheckAlign = ContentAlignment.MiddleCenter;
            ckbDrawRoi.Location = new Point(274, 4);
            ckbDrawRoi.Margin = new Padding(4, 4, 4, 4);
            ckbDrawRoi.Margin = new Padding(4);
            ckbDrawRoi.Name = "ckbDrawRoi";
            ckbDrawRoi.Size = new Size(18, 17);
            ckbDrawRoi.TabIndex = 2;
@@ -549,9 +549,9 @@
            // 
            tabPage2.Controls.Add(tableLayoutResults);
            tabPage2.Location = new Point(4, 29);
            tabPage2.Margin = new Padding(4, 4, 4, 4);
            tabPage2.Margin = new Padding(4);
            tabPage2.Name = "tabPage2";
            tabPage2.Padding = new Padding(4, 4, 4, 4);
            tabPage2.Padding = new Padding(4);
            tabPage2.Size = new Size(520, 611);
            tabPage2.TabIndex = 1;
            tabPage2.Text = "输出结果";
@@ -723,7 +723,7 @@
            // 
            dtxtCount.Dock = DockStyle.Fill;
            dtxtCount.Location = new Point(133, 304);
            dtxtCount.Margin = new Padding(4, 4, 4, 4);
            dtxtCount.Margin = new Padding(4);
            dtxtCount.Name = "dtxtCount";
            dtxtCount.ReadOnly = true;
            dtxtCount.Size = new Size(375, 27);
@@ -735,7 +735,7 @@
            imgTabControl.Controls.Add(tabPageRecordImage);
            imgTabControl.Dock = DockStyle.Fill;
            imgTabControl.Location = new Point(540, 4);
            imgTabControl.Margin = new Padding(4, 4, 4, 4);
            imgTabControl.Margin = new Padding(4);
            imgTabControl.Name = "imgTabControl";
            imgTabControl.SelectedIndex = 0;
            imgTabControl.Size = new Size(798, 644);
@@ -745,9 +745,9 @@
            // 
            tabPageInputImage.Controls.Add(pnlInputImage);
            tabPageInputImage.Location = new Point(4, 29);
            tabPageInputImage.Margin = new Padding(4, 4, 4, 4);
            tabPageInputImage.Margin = new Padding(4);
            tabPageInputImage.Name = "tabPageInputImage";
            tabPageInputImage.Padding = new Padding(4, 4, 4, 4);
            tabPageInputImage.Padding = new Padding(4);
            tabPageInputImage.Size = new Size(790, 611);
            tabPageInputImage.TabIndex = 0;
            tabPageInputImage.Text = "输入图像";
@@ -757,10 +757,10 @@
            // 
            tabPageRecordImage.Controls.Add(pnlRecordImage);
            tabPageRecordImage.Location = new Point(4, 29);
            tabPageRecordImage.Margin = new Padding(4, 4, 4, 4);
            tabPageRecordImage.Margin = new Padding(4);
            tabPageRecordImage.Name = "tabPageRecordImage";
            tabPageRecordImage.Padding = new Padding(4, 4, 4, 4);
            tabPageRecordImage.Size = new Size(790, 609);
            tabPageRecordImage.Padding = new Padding(4);
            tabPageRecordImage.Size = new Size(790, 611);
            tabPageRecordImage.TabIndex = 1;
            tabPageRecordImage.Text = "结果图像";
            tabPageRecordImage.UseVisualStyleBackColor = true;
@@ -769,9 +769,9 @@
            // 
            pnlRecordImage.Dock = DockStyle.Fill;
            pnlRecordImage.Location = new Point(4, 4);
            pnlRecordImage.Margin = new Padding(5, 5, 5, 5);
            pnlRecordImage.Margin = new Padding(5);
            pnlRecordImage.Name = "pnlRecordImage";
            pnlRecordImage.Size = new Size(782, 601);
            pnlRecordImage.Size = new Size(782, 603);
            pnlRecordImage.TabIndex = 45;
            // 
            // HFindLineToolEdit
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs
@@ -7,12 +7,12 @@
using System.Threading.Tasks;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace LB_VisionProcesses.Alogrithms.Halcon._2D.HEdgeExtraction
namespace LB_VisionProcesses.Alogrithms.Halcon
{
    public enum ImageEnhancementType { Emphasize, EquHisto, ScaleMax }
    [Process("Halcon图像增强", Category = "Halcon2D工具", Description = "创建图像增强工具")]
    internal class HImageEnhancementTool : TAlgorithm
    public class HImageEnhancementTool : TAlgorithm
    {
        public HImageEnhancementTool()
        {
@@ -20,9 +20,9 @@
            strProcessName = "Halcon图像增强工具";
            Params.Inputs.Add("滤波器类型", "边缘增强");
            Params.Inputs.Add("掩膜宽", 2.0);
            Params.Inputs.Add("掩膜高", 10);
            Params.Inputs.Add("增强因子", 20);
            Params.Inputs.Add("掩膜宽", 1);
            Params.Inputs.Add("掩膜高", 1);
            Params.Inputs.Add("增强因子", 1.0);
            //emphasize(Image : ImageEmphasize : MaskWidth, MaskHeight, Factor : )
            Params.Inputs.Add("滤波器类型", "直方图均衡化");
@@ -129,7 +129,7 @@
                double hv_Row2 = Convert.ToDouble(((HSegment)Params.ROI).EndRow + Params.Fixture.Row);
                double hv_Column2 = Convert.ToDouble(((HSegment)Params.ROI).EndColumn + Params.Fixture.Column);
                Emphsize(hoDomainImage, out ho_Regions, hv_Column1, hv_Row2, hv_Column2);
                ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_Column1, hv_Row2, hv_Column2);
                #endregion
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.Designer.cs
@@ -1,6 +1,6 @@
using LB_VisionProcesses.Alogrithms;
namespace LB_VisionProcesses.Alogrithms.Halcon._2D.HEdgeExtractionTool
namespace LB_VisionProcesses.Alogrithms.Halcon
{
    partial class HImageEnhancementToolEdit
    {
@@ -43,6 +43,20 @@
            MainTableLayoutPanel = new TableLayoutPanel();
            parasTabControl = new TabControl();
            tabPage1 = new TabPage();
            tableLayoutPanel1 = new TableLayoutPanel();
            dataGridViewIE = new DataGridView();
            tableLayoutPanel4 = new TableLayoutPanel();
            tableLayoutPanel3 = new TableLayoutPanel();
            cmbImageEnhancement = new ComboBox();
            btnAdd = new Button();
            labelImageEnhancement = new Label();
            tableLayoutPanel5 = new TableLayoutPanel();
            labelMaskWidth = new Label();
            labelMaskHeight = new Label();
            labelFactor = new Label();
            txtMaskWidth = new TextBox();
            txtMaskHeight = new TextBox();
            txtFactor = new TextBox();
            tabPage5 = new TabPage();
            tableLayoutPanel2 = new TableLayoutPanel();
            cmbTypeRoi = new ComboBox();
@@ -50,45 +64,25 @@
            label22 = new Label();
            cmbFixture = new ComboBox();
            ckbDrawRoi = new CheckBox();
            tabPage2 = new TabPage();
            tableLayoutResults = new TableLayoutPanel();
            dtxtHeight = new TextBox();
            label9 = new Label();
            label5 = new Label();
            label6 = new Label();
            label7 = new Label();
            label8 = new Label();
            dtxtCenterX = new TextBox();
            dtxtCenterY = new TextBox();
            dtxtAngle = new TextBox();
            dtxtWidth = new TextBox();
            label18 = new Label();
            dtxtCount = new TextBox();
            imgTabControl = new TabControl();
            tabPageInputImage = new TabPage();
            tabPageRecordImage = new TabPage();
            pnlRecordImage = new Panel();
            tableLayoutPanel1 = new TableLayoutPanel();
            tableLayoutPanel3 = new TableLayoutPanel();
            label14 = new Label();
            cmbImageEnhancement = new ComboBox();
            button1 = new Button();
            dataGridView1 = new DataGridView();
            TopToolStrip.SuspendLayout();
            BtmStatusStrip.SuspendLayout();
            MainTableLayoutPanel.SuspendLayout();
            parasTabControl.SuspendLayout();
            tabPage1.SuspendLayout();
            tableLayoutPanel1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)dataGridViewIE).BeginInit();
            tableLayoutPanel4.SuspendLayout();
            tableLayoutPanel3.SuspendLayout();
            tableLayoutPanel5.SuspendLayout();
            tabPage5.SuspendLayout();
            tableLayoutPanel2.SuspendLayout();
            tabPage2.SuspendLayout();
            tableLayoutResults.SuspendLayout();
            imgTabControl.SuspendLayout();
            tabPageInputImage.SuspendLayout();
            tabPageRecordImage.SuspendLayout();
            tableLayoutPanel1.SuspendLayout();
            tableLayoutPanel3.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit();
            SuspendLayout();
            // 
            // pnlInputImage
@@ -188,7 +182,6 @@
            // 
            parasTabControl.Controls.Add(tabPage1);
            parasTabControl.Controls.Add(tabPage5);
            parasTabControl.Controls.Add(tabPage2);
            parasTabControl.Dock = DockStyle.Fill;
            parasTabControl.Location = new Point(4, 4);
            parasTabControl.Margin = new Padding(4);
@@ -208,6 +201,161 @@
            tabPage1.TabIndex = 0;
            tabPage1.Text = "输入参数";
            tabPage1.UseVisualStyleBackColor = true;
            //
            // tableLayoutPanel1
            //
            tableLayoutPanel1.ColumnCount = 1;
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.Controls.Add(dataGridViewIE, 0, 1);
            tableLayoutPanel1.Controls.Add(tableLayoutPanel4, 0, 0);
            tableLayoutPanel1.Dock = DockStyle.Fill;
            tableLayoutPanel1.Location = new Point(4, 4);
            tableLayoutPanel1.Name = "tableLayoutPanel1";
            tableLayoutPanel1.RowCount = 2;
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 135F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.Size = new Size(512, 603);
            tableLayoutPanel1.TabIndex = 1;
            //
            // dataGridViewIE
            //
            dataGridViewIE.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            dataGridViewIE.Location = new Point(3, 138);
            dataGridViewIE.Name = "dataGridViewIE";
            dataGridViewIE.RowHeadersWidth = 51;
            dataGridViewIE.Size = new Size(506, 462);
            dataGridViewIE.TabIndex = 2;
            //
            // tableLayoutPanel4
            //
            tableLayoutPanel4.ColumnCount = 1;
            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel4.Controls.Add(tableLayoutPanel3, 0, 0);
            tableLayoutPanel4.Controls.Add(tableLayoutPanel5, 0, 1);
            tableLayoutPanel4.Location = new Point(3, 3);
            tableLayoutPanel4.Name = "tableLayoutPanel4";
            tableLayoutPanel4.RowCount = 2;
            tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Absolute, 45F));
            tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel4.Size = new Size(506, 125);
            tableLayoutPanel4.TabIndex = 3;
            //
            // tableLayoutPanel3
            //
            tableLayoutPanel3.ColumnCount = 3;
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 125F));
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 125F));
            tableLayoutPanel3.Controls.Add(cmbImageEnhancement, 1, 0);
            tableLayoutPanel3.Controls.Add(btnAdd, 2, 0);
            tableLayoutPanel3.Controls.Add(labelImageEnhancement, 0, 0);
            tableLayoutPanel3.Location = new Point(3, 3);
            tableLayoutPanel3.Name = "tableLayoutPanel3";
            tableLayoutPanel3.RowCount = 1;
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel3.Size = new Size(500, 38);
            tableLayoutPanel3.TabIndex = 1;
            //
            // cmbImageEnhancement
            //
            cmbImageEnhancement.FormattingEnabled = true;
            cmbImageEnhancement.Location = new Point(129, 4);
            cmbImageEnhancement.Margin = new Padding(4);
            cmbImageEnhancement.Name = "cmbImageEnhancement";
            cmbImageEnhancement.Size = new Size(242, 28);
            cmbImageEnhancement.TabIndex = 14;
            cmbImageEnhancement.SelectedIndexChanged += cmbImageEnhancement_SelectedIndexChanged;
            //
            // btnAdd
            //
            btnAdd.Location = new Point(378, 3);
            btnAdd.Name = "btnAdd";
            btnAdd.Size = new Size(119, 30);
            btnAdd.TabIndex = 15;
            btnAdd.Text = "添加";
            btnAdd.UseVisualStyleBackColor = true;
            btnAdd.Click += btnAdd_Click;
            //
            // labelImageEnhancement
            //
            labelImageEnhancement.AutoSize = true;
            labelImageEnhancement.Location = new Point(3, 0);
            labelImageEnhancement.MaximumSize = new Size(0, 33);
            labelImageEnhancement.MinimumSize = new Size(0, 33);
            labelImageEnhancement.Name = "labelImageEnhancement";
            labelImageEnhancement.Size = new Size(69, 33);
            labelImageEnhancement.TabIndex = 1;
            labelImageEnhancement.Text = "滤波类型";
            labelImageEnhancement.TextAlign = ContentAlignment.MiddleCenter;
            //
            // tableLayoutPanel5
            //
            tableLayoutPanel5.ColumnCount = 4;
            tableLayoutPanel5.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
            tableLayoutPanel5.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
            tableLayoutPanel5.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
            tableLayoutPanel5.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
            tableLayoutPanel5.Controls.Add(labelMaskWidth, 0, 0);
            tableLayoutPanel5.Controls.Add(labelMaskHeight, 2, 0);
            tableLayoutPanel5.Controls.Add(labelFactor, 0, 1);
            tableLayoutPanel5.Controls.Add(txtMaskWidth, 1, 0);
            tableLayoutPanel5.Controls.Add(txtMaskHeight, 3, 0);
            tableLayoutPanel5.Controls.Add(txtFactor, 1, 1);
            tableLayoutPanel5.Location = new Point(3, 48);
            tableLayoutPanel5.Name = "tableLayoutPanel5";
            tableLayoutPanel5.RowCount = 2;
            tableLayoutPanel5.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
            tableLayoutPanel5.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
            tableLayoutPanel5.Size = new Size(500, 74);
            tableLayoutPanel5.TabIndex = 2;
            //
            // labelMaskWidth
            //
            labelMaskWidth.AutoSize = true;
            labelMaskWidth.Location = new Point(3, 0);
            labelMaskWidth.Name = "labelMaskWidth";
            labelMaskWidth.Size = new Size(54, 20);
            labelMaskWidth.TabIndex = 0;
            labelMaskWidth.Text = "掩膜宽";
            //
            // labelMaskHeight
            //
            labelMaskHeight.AutoSize = true;
            labelMaskHeight.Location = new Point(253, 0);
            labelMaskHeight.Name = "labelMaskHeight";
            labelMaskHeight.Size = new Size(54, 20);
            labelMaskHeight.TabIndex = 1;
            labelMaskHeight.Text = "掩膜高";
            //
            // labelFactor
            //
            labelFactor.AutoSize = true;
            labelFactor.Location = new Point(3, 37);
            labelFactor.Name = "labelFactor";
            labelFactor.Size = new Size(69, 20);
            labelFactor.TabIndex = 2;
            labelFactor.Text = "增强因子";
            //
            // txtMaskWidth
            //
            txtMaskWidth.Location = new Point(128, 3);
            txtMaskWidth.Name = "txtMaskWidth";
            txtMaskWidth.Size = new Size(119, 27);
            txtMaskWidth.TabIndex = 3;
            //
            // txtMaskHeight
            //
            txtMaskHeight.Location = new Point(378, 3);
            txtMaskHeight.Name = "txtMaskHeight";
            txtMaskHeight.Size = new Size(119, 27);
            txtMaskHeight.TabIndex = 4;
            //
            // txtFactor
            //
            txtFactor.Location = new Point(128, 40);
            txtFactor.Name = "txtFactor";
            txtFactor.Size = new Size(119, 27);
            txtFactor.TabIndex = 5;
            // 
            // tabPage5
            // 
@@ -301,190 +449,6 @@
            ckbDrawRoi.TabIndex = 2;
            ckbDrawRoi.UseVisualStyleBackColor = true;
            // 
            // tabPage2
            //
            tabPage2.Controls.Add(tableLayoutResults);
            tabPage2.Location = new Point(4, 29);
            tabPage2.Margin = new Padding(4);
            tabPage2.Name = "tabPage2";
            tabPage2.Padding = new Padding(4);
            tabPage2.Size = new Size(520, 611);
            tabPage2.TabIndex = 1;
            tabPage2.Text = "输出结果";
            tabPage2.UseVisualStyleBackColor = true;
            //
            // tableLayoutResults
            //
            tableLayoutResults.ColumnCount = 2;
            tableLayoutResults.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 129F));
            tableLayoutResults.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutResults.Controls.Add(dtxtHeight, 1, 4);
            tableLayoutResults.Controls.Add(label9, 0, 4);
            tableLayoutResults.Controls.Add(label5, 0, 0);
            tableLayoutResults.Controls.Add(label6, 0, 1);
            tableLayoutResults.Controls.Add(label7, 0, 2);
            tableLayoutResults.Controls.Add(label8, 0, 3);
            tableLayoutResults.Controls.Add(dtxtCenterX, 1, 0);
            tableLayoutResults.Controls.Add(dtxtCenterY, 1, 1);
            tableLayoutResults.Controls.Add(dtxtAngle, 1, 2);
            tableLayoutResults.Controls.Add(dtxtWidth, 1, 3);
            tableLayoutResults.Controls.Add(label18, 0, 5);
            tableLayoutResults.Controls.Add(dtxtCount, 1, 5);
            tableLayoutResults.Dock = DockStyle.Fill;
            tableLayoutResults.Location = new Point(4, 4);
            tableLayoutResults.Margin = new Padding(3, 4, 3, 4);
            tableLayoutResults.Name = "tableLayoutResults";
            tableLayoutResults.RowCount = 10;
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.Size = new Size(512, 603);
            tableLayoutResults.TabIndex = 1;
            //
            // dtxtHeight
            //
            dtxtHeight.Dock = DockStyle.Fill;
            dtxtHeight.Location = new Point(132, 244);
            dtxtHeight.Margin = new Padding(3, 4, 3, 4);
            dtxtHeight.Name = "dtxtHeight";
            dtxtHeight.ReadOnly = true;
            dtxtHeight.Size = new Size(377, 27);
            dtxtHeight.TabIndex = 9;
            //
            // label9
            //
            label9.AutoSize = true;
            label9.Dock = DockStyle.Fill;
            label9.Location = new Point(3, 240);
            label9.MaximumSize = new Size(0, 33);
            label9.MinimumSize = new Size(0, 33);
            label9.Name = "label9";
            label9.Size = new Size(123, 33);
            label9.TabIndex = 3;
            label9.Text = "高度";
            label9.TextAlign = ContentAlignment.TopCenter;
            //
            // label5
            //
            label5.AutoSize = true;
            label5.Dock = DockStyle.Fill;
            label5.Location = new Point(3, 0);
            label5.MaximumSize = new Size(0, 33);
            label5.MinimumSize = new Size(0, 33);
            label5.Name = "label5";
            label5.Size = new Size(123, 33);
            label5.TabIndex = 0;
            label5.Text = "X";
            label5.TextAlign = ContentAlignment.TopCenter;
            //
            // label6
            //
            label6.AutoSize = true;
            label6.Dock = DockStyle.Fill;
            label6.Location = new Point(3, 60);
            label6.MaximumSize = new Size(0, 33);
            label6.MinimumSize = new Size(0, 33);
            label6.Name = "label6";
            label6.Size = new Size(123, 33);
            label6.TabIndex = 1;
            label6.Text = "Y";
            label6.TextAlign = ContentAlignment.TopCenter;
            //
            // label7
            //
            label7.AutoSize = true;
            label7.Dock = DockStyle.Fill;
            label7.Location = new Point(3, 120);
            label7.MaximumSize = new Size(0, 33);
            label7.MinimumSize = new Size(0, 33);
            label7.Name = "label7";
            label7.Size = new Size(123, 33);
            label7.TabIndex = 2;
            label7.Text = "角度(°)";
            label7.TextAlign = ContentAlignment.TopCenter;
            //
            // label8
            //
            label8.AutoSize = true;
            label8.Dock = DockStyle.Fill;
            label8.Location = new Point(3, 180);
            label8.MaximumSize = new Size(0, 33);
            label8.MinimumSize = new Size(0, 33);
            label8.Name = "label8";
            label8.Size = new Size(123, 33);
            label8.TabIndex = 3;
            label8.Text = "宽度";
            label8.TextAlign = ContentAlignment.TopCenter;
            //
            // dtxtCenterX
            //
            dtxtCenterX.Dock = DockStyle.Fill;
            dtxtCenterX.Location = new Point(132, 4);
            dtxtCenterX.Margin = new Padding(3, 4, 3, 4);
            dtxtCenterX.Name = "dtxtCenterX";
            dtxtCenterX.ReadOnly = true;
            dtxtCenterX.Size = new Size(377, 27);
            dtxtCenterX.TabIndex = 5;
            //
            // dtxtCenterY
            //
            dtxtCenterY.Dock = DockStyle.Fill;
            dtxtCenterY.Location = new Point(132, 64);
            dtxtCenterY.Margin = new Padding(3, 4, 3, 4);
            dtxtCenterY.Name = "dtxtCenterY";
            dtxtCenterY.ReadOnly = true;
            dtxtCenterY.Size = new Size(377, 27);
            dtxtCenterY.TabIndex = 6;
            //
            // dtxtAngle
            //
            dtxtAngle.Dock = DockStyle.Fill;
            dtxtAngle.Location = new Point(132, 124);
            dtxtAngle.Margin = new Padding(3, 4, 3, 4);
            dtxtAngle.Name = "dtxtAngle";
            dtxtAngle.ReadOnly = true;
            dtxtAngle.Size = new Size(377, 27);
            dtxtAngle.TabIndex = 7;
            //
            // dtxtWidth
            //
            dtxtWidth.Dock = DockStyle.Fill;
            dtxtWidth.Location = new Point(132, 184);
            dtxtWidth.Margin = new Padding(3, 4, 3, 4);
            dtxtWidth.Name = "dtxtWidth";
            dtxtWidth.ReadOnly = true;
            dtxtWidth.Size = new Size(377, 27);
            dtxtWidth.TabIndex = 8;
            //
            // label18
            //
            label18.AutoSize = true;
            label18.Dock = DockStyle.Fill;
            label18.Location = new Point(4, 300);
            label18.Margin = new Padding(4, 0, 4, 0);
            label18.Name = "label18";
            label18.Size = new Size(121, 60);
            label18.TabIndex = 10;
            label18.Text = "数量";
            label18.TextAlign = ContentAlignment.TopCenter;
            //
            // dtxtCount
            //
            dtxtCount.Dock = DockStyle.Fill;
            dtxtCount.Location = new Point(133, 304);
            dtxtCount.Margin = new Padding(4);
            dtxtCount.Name = "dtxtCount";
            dtxtCount.ReadOnly = true;
            dtxtCount.Size = new Size(375, 27);
            dtxtCount.TabIndex = 11;
            //
            // imgTabControl
            // 
            imgTabControl.Controls.Add(tabPageInputImage);
@@ -530,76 +494,6 @@
            pnlRecordImage.Size = new Size(782, 603);
            pnlRecordImage.TabIndex = 45;
            // 
            // tableLayoutPanel1
            //
            tableLayoutPanel1.ColumnCount = 1;
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
            tableLayoutPanel1.Controls.Add(tableLayoutPanel3, 0, 0);
            tableLayoutPanel1.Controls.Add(dataGridView1, 0, 1);
            tableLayoutPanel1.Dock = DockStyle.Fill;
            tableLayoutPanel1.Location = new Point(4, 4);
            tableLayoutPanel1.Name = "tableLayoutPanel1";
            tableLayoutPanel1.RowCount = 2;
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 10.2819233F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 89.71808F));
            tableLayoutPanel1.Size = new Size(512, 603);
            tableLayoutPanel1.TabIndex = 1;
            //
            // tableLayoutPanel3
            //
            tableLayoutPanel3.ColumnCount = 3;
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 31.5363884F));
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 68.4636154F));
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 136F));
            tableLayoutPanel3.Controls.Add(cmbImageEnhancement, 1, 0);
            tableLayoutPanel3.Controls.Add(label14, 0, 0);
            tableLayoutPanel3.Controls.Add(button1, 2, 0);
            tableLayoutPanel3.Location = new Point(3, 3);
            tableLayoutPanel3.Name = "tableLayoutPanel3";
            tableLayoutPanel3.RowCount = 1;
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
            tableLayoutPanel3.Size = new Size(506, 54);
            tableLayoutPanel3.TabIndex = 1;
            //
            // label14
            //
            label14.AutoSize = true;
            label14.Location = new Point(3, 0);
            label14.MaximumSize = new Size(0, 33);
            label14.MinimumSize = new Size(0, 33);
            label14.Name = "label14";
            label14.Size = new Size(69, 33);
            label14.TabIndex = 1;
            label14.Text = "滤波类型";
            label14.TextAlign = ContentAlignment.MiddleCenter;
            //
            // cmbImageEnhancement
            //
            cmbImageEnhancement.FormattingEnabled = true;
            cmbImageEnhancement.Location = new Point(120, 4);
            cmbImageEnhancement.Margin = new Padding(4);
            cmbImageEnhancement.Name = "cmbImageEnhancement";
            cmbImageEnhancement.Size = new Size(129, 28);
            cmbImageEnhancement.TabIndex = 14;
            //
            // button1
            //
            button1.Location = new Point(372, 3);
            button1.Name = "button1";
            button1.Size = new Size(131, 48);
            button1.TabIndex = 15;
            button1.Text = "添加";
            button1.UseVisualStyleBackColor = true;
            //
            // dataGridView1
            //
            dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            dataGridView1.Location = new Point(3, 64);
            dataGridView1.Name = "dataGridView1";
            dataGridView1.RowHeadersWidth = 51;
            dataGridView1.Size = new Size(506, 536);
            dataGridView1.TabIndex = 2;
            //
            // HImageEnhancementToolEdit
            // 
            AutoScaleDimensions = new SizeF(9F, 20F);
@@ -617,19 +511,19 @@
            MainTableLayoutPanel.ResumeLayout(false);
            parasTabControl.ResumeLayout(false);
            tabPage1.ResumeLayout(false);
            tableLayoutPanel1.ResumeLayout(false);
            ((System.ComponentModel.ISupportInitialize)dataGridViewIE).EndInit();
            tableLayoutPanel4.ResumeLayout(false);
            tableLayoutPanel3.ResumeLayout(false);
            tableLayoutPanel3.PerformLayout();
            tableLayoutPanel5.ResumeLayout(false);
            tableLayoutPanel5.PerformLayout();
            tabPage5.ResumeLayout(false);
            tableLayoutPanel2.ResumeLayout(false);
            tableLayoutPanel2.PerformLayout();
            tabPage2.ResumeLayout(false);
            tableLayoutResults.ResumeLayout(false);
            tableLayoutResults.PerformLayout();
            imgTabControl.ResumeLayout(false);
            tabPageInputImage.ResumeLayout(false);
            tabPageRecordImage.ResumeLayout(false);
            tableLayoutPanel1.ResumeLayout(false);
            tableLayoutPanel3.ResumeLayout(false);
            tableLayoutPanel3.PerformLayout();
            ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit();
            ResumeLayout(false);
            PerformLayout();
        }
@@ -645,18 +539,6 @@
        private ToolStripButton btnLoadImage;
        private TabControl parasTabControl;
        private TabPage tabPage1;
        private TabPage tabPage2;
        private TableLayoutPanel tableLayoutResults;
        private Label label5;
        private Label label6;
        private Label label7;
        private Label label8;
        private TextBox dtxtCenterX;
        private TextBox dtxtCenterY;
        private TextBox dtxtAngle;
        private TextBox dtxtWidth;
        private TextBox dtxtHeight;
        private Label label9;
        private TabPage tabPage5;
        private TabControl imgTabControl;
        private TabPage tabPageInputImage;
@@ -664,8 +546,6 @@
        private ToolStripButton btnSaveParas;
        private ToolStripButton btnLoadParas;
        private Panel pnlRecordImage;
        private Label label18;
        private TextBox dtxtCount;
        private ToolStripStatusLabel lblRunTime;
        private TableLayoutPanel tableLayoutPanel2;
        public ComboBox cmbTypeRoi;
@@ -675,9 +555,17 @@
        private CheckBox ckbDrawRoi;
        private TableLayoutPanel tableLayoutPanel1;
        private TableLayoutPanel tableLayoutPanel3;
        private Label label14;
        private Label labelImageEnhancement;
        private ComboBox cmbImageEnhancement;
        private Button button1;
        private DataGridView dataGridView1;
        private DataGridView dataGridViewIE;
        private TableLayoutPanel tableLayoutPanel4;
        private Button btnAdd;
        private TableLayoutPanel tableLayoutPanel5;
        private Label labelMaskWidth;
        private Label labelMaskHeight;
        private Label labelFactor;
        private TextBox txtMaskWidth;
        private TextBox txtMaskHeight;
        private TextBox txtFactor;
    }
}
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.cs
@@ -1,4 +1,9 @@
using System;
using HalconDotNet;
using LB_SmartVisionCommon;
using LB_VisionControl;
using LB_VisionProcesses.Alogrithms.Halcon;
using Sunny.UI.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
@@ -8,13 +13,454 @@
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LB_VisionProcesses.Alogrithms.Halcon._2D.HEdgeExtractionTool
namespace LB_VisionProcesses.Alogrithms.Halcon
{
    public partial class HImageEnhancementToolEdit : UserControl
    public partial class HImageEnhancementToolEdit : TAlgorithmEdit
    {
        public HImageEnhancementToolEdit()
        private int rowriginalHeight;
        public HImageEnhancementToolEdit(HImageEnhancementTool subject = null)
        {
            if (subject != null && subject is HImageEnhancementTool)
                Subject = subject;
            else
                Subject = new HImageEnhancementTool();
            if (!(Subject.Params.ROI is HSegment))
                Subject.Params.ROI = new HSegment(0, 0, 250, 250);
            // 保存原始行高度
            rowriginalHeight = (int)tableLayoutPanel4.RowStyles[1].Height;
            this.Dock = DockStyle.Fill;
            InitializeComponent();
            InitializeComboBox();
            InitializeDataGridView();
        }
        private void InitializeComboBox()
        {
            //// 添加权限选项
            //foreach (var item in Enum.GetValues(typeof(UserPermission)))
            //{
            //    cmbImageEnhancement.Items.Add(item.ToString());
            //}
            cmbImageEnhancement.Items.Add("emphasize边缘增强");
            cmbImageEnhancement.Items.Add("equ_histo_image直方图均衡化");
            cmbImageEnhancement.Items.Add("scale_image_max比例增强");
            // 设置默认选择项
            cmbImageEnhancement.SelectedIndex = 2;
        }
        #region 图像增强算法选择下拉框
        private void cmbImageEnhancement_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cb = sender as ComboBox;
            if (cb.SelectedIndex == 0)
            {
                ShowRow();
            }
            else if (cb.SelectedIndex == 1)
            {
                HideRow();
            }
        }
        private void ShowRow()
        {
            // 显示Row2(恢复高度)
            tableLayoutPanel4.RowStyles[1].SizeType = SizeType.Absolute;
            tableLayoutPanel4.RowStyles[1].Height = rowriginalHeight;
            // 显示Row2中的控件
            foreach (Control ctrl in tableLayoutPanel4.Controls)
            {
                int row = tableLayoutPanel4.GetRow(ctrl);
                if (row == 1)
                    ctrl.Visible = true;
            }
        }
        private void HideRow()
        {
            // 显示Row2(恢复高度)
            tableLayoutPanel4.RowStyles[1].SizeType = SizeType.Absolute;
            tableLayoutPanel4.RowStyles[1].Height = 0;
            // 显示Row2中的控件
            foreach (Control ctrl in tableLayoutPanel4.Controls)
            {
                int row = tableLayoutPanel4.GetRow(ctrl);
                if (row == 1)
                    ctrl.Visible = false;
            }
        }
        #endregion
        private void InitializeDataGridView()
        {
            //this.dataGridViewIE.DataSource = recordUserDatas;
            // 设置列标题
            dataGridViewIE.Columns[0].Name = "滤波器类型";
            dataGridViewIE.Columns[1].Name = "掩膜宽度";
            dataGridViewIE.Columns[2].Name = "掩膜高度";
            dataGridViewIE.Columns[3].Name = "增强因子";
            // 设置DataGridView列宽
            dataGridViewIE.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
        }
        /// <summary>
        /// 控件加载事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void HImageEnhancementToolEdit_Load(object sender, EventArgs e)
        {
            pnlInputImage.Controls.Add(inputImageHSmartWindowControl);
            inputImageHSmartWindowControl.Dock = DockStyle.Fill;
            pnlRecordImage.Controls.Add(recordImageHSmartWindowControl);
            recordImageHSmartWindowControl.Dock = DockStyle.Fill;
            //遍历可以选择的Roi类型枚举
            foreach (var value in Enum.GetValues(typeof(RoiType)))
                cmbTypeRoi.Items.Add(value.ToString());
            //遍历可以选择的图像增强类型枚举
            foreach (var value in Enum.GetValues(typeof(ImageEnhancementType)))
                cmbImageEnhancement.Items.Add(value.ToString());
            //遍历可以选择的Fixture枚举
            cmbFixture.Items.Add("");
            foreach (string value in IProcess.dicFixtures.Keys)
                cmbFixture.Items.Add(value.ToString());
            ckbDrawRoi.Checked = true;
            cmbTypeRoi.Text = RoiType.Segment.ToString();
            cmbImageEnhancement.Text = Transition.Ignore.ToString();
            LoadParas();
            if (Subject.Result)
            {
                lblResult.BackColor = Color.Green;
                lblResult.Text = "True";
            }
            else
            {
                lblResult.BackColor = Color.Red;
                lblResult.Text = "False";
            }
            lblMsg.Text = Msg.Length > 50 ? Msg.Substring(0, 50) : Msg;
            lblMsgToolTip.SetToolTip(BtmStatusStrip, Msg);
            lblRunTime.Text = $"{Subject.RunTime}ms";
        }
        /// <summary>
        /// 更新运行参数
        /// </summary>
        public override void UpdataInputs()
        {
            //设置运行参数
            double dResult = 0;
            int iResult = 0;
            if (cmbFixture.Text == "")
                Subject.Params.Fixture = new Fixture();
            else if (IProcess.dicFixtures.ContainsKey(cmbFixture.Text))
                Subject.Params.Fixture = IProcess.dicFixtures[cmbFixture.Text];
            Type type = inputImageHSmartWindowControl.oRoi?.GetType();
            switch (type)
            {
                case Type t when t == typeof(HRectangle2):
                    HRectangle2 hRectangle2 = (HRectangle2)inputImageHSmartWindowControl.oRoi;
                    Subject.Params.ROI
                        = new HRectangle2(hRectangle2.X - Subject.Params.Fixture.X, hRectangle2.Y - Subject.Params.Fixture.Y
                        , hRectangle2.Phi - Subject.Params.Fixture.Phi, hRectangle2.Width, hRectangle2.Height);
                    break;
                case Type t when t == typeof(HCircle):
                    HCircle hCircle = (HCircle)inputImageHSmartWindowControl.oRoi;
                    Subject.Params.ROI
                        = new HCircle(hCircle.X - Subject.Params.Fixture.X, hCircle.Y - Subject.Params.Fixture.Y, hCircle.Radius);
                    break;
                case Type t when t == typeof(HSegment):
                    HSegment hSegment = (HSegment)inputImageHSmartWindowControl.oRoi;
                    Subject.Params.ROI
                        = new HSegment(hSegment.StartX - Subject.Params.Fixture.X, hSegment.StartY - Subject.Params.Fixture.Y
                        , hSegment.EndX - Subject.Params.Fixture.X, hSegment.EndY - Subject.Params.Fixture.Y);
                    break;
                default:
                    Subject.Params.ROI = new ROI();
                    break;
            }
        }
        /// <summary>
        /// 加载运行参数
        /// </summary>
        public override void LoadParas()
        {
            this.BeginInvoke(new Action(() =>
            {
                if (Subject.InputImage != null && Subject.InputImage is HObject)
                    inputImageHSmartWindowControl.ShowHoImage((HObject)Subject.InputImage);
                Type type = Subject.Params.ROI?.GetType();
                if (Subject.Params.ROI != null)
                {
                    switch (type)
                    {
                        case Type t when t == typeof(HRectangle2):
                            cmbTypeRoi.Text = RoiType.Rectangle2.ToString();
                            break;
                        case Type t when t == typeof(HCircle):
                            cmbTypeRoi.Text = RoiType.Circle.ToString();
                            break;
                        case Type t when t == typeof(HSegment):
                            cmbTypeRoi.Text = RoiType.Segment.ToString();
                            break;
                        default:
                            cmbTypeRoi.Text = RoiType.None.ToString();
                            break;
                    }
                    if (cmbTypeRoi.Text.ToString() != "None")
                        ckbDrawRoi.Checked = true;
                    else
                        ckbDrawRoi.Checked = false;
                    inputImageHSmartWindowControl.oRoi = Subject.Params.ROI;
                }
                if (Subject.Params.Fixture != null)
                    cmbFixture.Text = Subject.Params.Fixture.strName;
                else
                    cmbFixture.Text = "";
                switch (type)
                {
                    case Type t when t == typeof(HRectangle2):
                        inputImageHSmartWindowControl.oRoi
                             = new HRectangle2(Subject.Params.ROI.X + Subject.Params.Fixture.X, Subject.Params.ROI.Y + Subject.Params.Fixture.Y
                             , Subject.Params.ROI.Phi + Subject.Params.Fixture.Phi, ((HRectangle2)Subject.Params.ROI).Width, ((HRectangle2)Subject.Params.ROI).Height);
                        break;
                    case Type t when t == typeof(HCircle):
                        inputImageHSmartWindowControl.oRoi
                        = new HCircle(Subject.Params.ROI.X + Subject.Params.Fixture.X, Subject.Params.ROI.Y + Subject.Params.Fixture.Y
                        , ((HCircle)Subject.Params.ROI).Radius);
                        break;
                    case Type t when t == typeof(HSegment):
                        inputImageHSmartWindowControl.oRoi
                        = new HSegment(((HSegment)Subject.Params.ROI).StartX + Subject.Params.Fixture.X, ((HSegment)Subject.Params.ROI).StartY + Subject.Params.Fixture.Y
                        , ((HSegment)Subject.Params.ROI).EndX + Subject.Params.Fixture.X, ((HSegment)Subject.Params.ROI).EndY + Subject.Params.Fixture.Y);
                        break;
                    default:
                        inputImageHSmartWindowControl.oRoi = null;
                        break;
                }
            }));
        }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            switch (cmbImageEnhancement.SelectedIndex)
            {
                case 0:
                    break;
                case 1:
                    break;
                case 2:
                    break;
            }
        }
        /// <summary>
        /// 点击运行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void btnRun_Click(object sender, EventArgs e)
        {
            if (Subject.InputImage != null)
                InputImage = Subject.InputImage;
            DateTime StartTime = DateTime.Now;
            Run();
            //更新日志与结果
            this.BeginInvoke(new Action(() =>
            {
                if (Subject.Result)
                {
                    lblResult.BackColor = Color.Green;
                    lblResult.Text = "True";
                    recordImageHSmartWindowControl.SetColor("green");
                }
                else
                {
                    lblResult.BackColor = Color.Red;
                    lblResult.Text = "False";
                    recordImageHSmartWindowControl.SetColor("red");
                }
                lblMsg.Text = Msg.Length > 50 ? Msg.Substring(0, 50) : Msg;
                lblMsgToolTip.SetToolTip(BtmStatusStrip, Msg);
                lblRunTime.Text = $"{(DateTime.Now - StartTime).TotalMilliseconds}ms";
                UpdataOutputs();
                imgTabControl.SelectedTab = tabPageRecordImage;
                if (Subject.InputImage != null && Subject.InputImage is HObject)
                {
                    HOperatorSet.GetImageSize((HObject)Subject.InputImage, out HTuple ho_ImageWidth, out HTuple ho_ImageHeight);
                    recordImageHSmartWindowControl.ShowHoImage((HObject)Subject.InputImage);
                }
                //先判断子类再判断父类
                if (Subject.Record != null && Subject.Record is MsgRecord msgRecord)
                {
                    recordImageHSmartWindowControl.DispObj(msgRecord.RecordObject_OK, true);
                    recordImageHSmartWindowControl.DispObj(msgRecord.RecordObject_NG, false);
                    for (int i = 0; i < msgRecord.Msg.Length; i++)
                        recordImageHSmartWindowControl.ShowMsg(msgRecord.Msg[i]
                            , 1 == msgRecord.Result[i] ? true : false, msgRecord.Column[i], msgRecord.Row[i]);
                }
                else if (Subject.Record != null && Subject.Record is ObjectRecord objRecord)
                {
                    recordImageHSmartWindowControl.DispObj(objRecord.RecordObject_OK, true);
                    recordImageHSmartWindowControl.DispObj(objRecord.RecordObject_NG, false);
                }
                GC.Collect();
            }));
        }
        #region 工具栏按钮事件
        /// <summary>
        /// 工具栏“导图”
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void btnLoadImage_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            // 设置文件对话框的属性
            openFileDialog.Multiselect = false; // 不允许多选
            // 设置文件过滤器,支持多种文件类型
            openFileDialog.Filter = "Image Files (*.png;*.jpg;*.jpeg;*.bmp)|*.png;*.jpg;*.jpeg;*.bmp|All Files (*.*)|*.*";
            // 显示文件对话框
            DialogResult result = openFileDialog.ShowDialog();
            // 处理对话框返回结果
            if (result == DialogResult.OK)
            {
                // 获取用户选择的文件名
                string[] selectedFiles = openFileDialog.FileNames;
                if (selectedFiles.Length > 0)
                {
                    HOperatorSet.ReadImage(out HObject ho_Image, selectedFiles[0]);
                    //判断是否为灰度图
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        HOperatorSet.CountChannels(ho_Image, out HTuple hv_Channels);
                        if (hv_Channels.TupleInt() != 1)
                        {
                            HOperatorSet.Rgb1ToGray(ho_Image, out ho_Image);
                            //更新日志与结果
                            this.BeginInvoke(new Action(() =>
                            {
                                lblMsg.Text = "导入图片非灰度图,自动转换为灰度图";
                            }));
                        }
                        InputImage = ho_Image;
                        imgTabControl.SelectedTab = tabPageInputImage;
                        inputImageHSmartWindowControl.oRoi = inputImageHSmartWindowControl.oRoi;
                    }
                }
            }
        }
        /// <summary>
        /// 工具栏“保存”
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void btnSaveParas_Click(object sender, EventArgs e) { base.btnSaveParas_Click(sender, e); }
        #endregion
        #region ROI功能
        /// <summary>
        /// 是否启用ROI
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void ckbDrawRoi_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbDrawRoi.Checked)
            {
                inputImageHSmartWindowControl.bAollowDraw = true;
                imgTabControl.SelectedTab = tabPageInputImage;
            }
            else
            {
                inputImageHSmartWindowControl.bAollowDraw = false;
                Subject.Params.ROI = new ROI();
            }
        }
        /// <summary>
        /// ROI下拉框改变事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void cmbTypeRoi_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (Enum.TryParse(cmbTypeRoi.Text.ToString(), out RoiType type))
                {
                    HTuple hv_imageWidth = 0;
                    HTuple hv_imageHeight = 0;
                    if (InputImage != null && InputImage is HObject)
                        HOperatorSet.GetImageSize((HObject)InputImage, out hv_imageWidth, out hv_imageHeight);
                    switch (type)
                    {
                        case RoiType.Rectangle2:
                            inputImageHSmartWindowControl.oRoi
                                = new HRectangle2(hv_imageWidth.TupleReal() / 2, hv_imageHeight.TupleReal() / 2, 0
                                , hv_imageWidth.TupleReal() / 4, hv_imageHeight.TupleReal() / 4);
                            break;
                        case RoiType.Circle:
                            inputImageHSmartWindowControl.oRoi
                                = new HCircle(hv_imageWidth.TupleReal() / 2, hv_imageHeight.TupleReal() / 2, hv_imageWidth.TupleReal() / 4);
                            break;
                        case RoiType.Segment:
                            inputImageHSmartWindowControl.oRoi
                                = new HSegment(0, 0, hv_imageWidth.TupleReal() / 4, hv_imageHeight.TupleReal() / 4);
                            break;
                        case RoiType.None:
                        default:
                            inputImageHSmartWindowControl.oRoi = null;
                            break;
                    }
                }
            }
            catch { }
        }
        #endregion
        public override void cmbFixture_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (IProcess.dicFixtures.ContainsKey(cmbFixture.Text))
                    Subject.Params.Fixture = IProcess.dicFixtures[cmbFixture.Text];
                else
                    Subject.Params.Fixture = new Fixture();
            }
            catch { }
        }
    }
}
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.resx
@@ -117,10 +117,13 @@
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <metadata name="TopToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="lblMsgToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </metadata>
  <metadata name="TopToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>183, 17</value>
  </metadata>
  <metadata name="BtmStatusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>174, 17</value>
    <value>340, 17</value>
  </metadata>
</root>
LB_VisionProcesses/ProcessEditForm.cs