693a6135b4762c20c01b5df52ea2da9ae73f237b..130802fa7ef10857db12f784956d5ea122a1eeb4
2026-01-30 C3031
130802 对比 | 目录
2026-01-30 C3031
22ff83 对比 | 目录
2026-01-30 C3031
065674 对比 | 目录
已修改10个文件
已添加4个文件
2735 ■■■■ 文件已修改
LB_SmartVision/VisionForm.Designer.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/VisionForm.resx 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.Designer.cs 603 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.resx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.Designer.cs 262 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.resx 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs 395 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.resx 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.Designer.cs 571 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.cs 466 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.resx 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/ProcessEditForm.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/VisionForm.Designer.cs
@@ -91,7 +91,7 @@
            // 
            sc_VisionForm.Panel2.Controls.Add(grb_Info);
            sc_VisionForm.Size = new Size(1416, 781);
            sc_VisionForm.SplitterDistance = 572;
            sc_VisionForm.SplitterDistance = 593;
            sc_VisionForm.SplitterWidth = 5;
            sc_VisionForm.TabIndex = 1;
            // 
@@ -110,7 +110,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, 572);
            tlp_MainView.Size = new Size(1416, 593);
            tlp_MainView.TabIndex = 1;
            tlp_MainView.TagString = null;
            // 
@@ -124,7 +124,7 @@
            materialTabControl.MouseState = MaterialSkin.MouseState.HOVER;
            materialTabControl.Name = "materialTabControl";
            materialTabControl.SelectedIndex = 0;
            materialTabControl.Size = new Size(1412, 469);
            materialTabControl.Size = new Size(1412, 490);
            materialTabControl.TabIndex = 0;
            // 
            // tlp_VisionMainOperator
@@ -277,7 +277,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, 204);
            grb_Info.Size = new Size(1416, 183);
            grb_Info.TabIndex = 1;
            grb_Info.Text = "日志显示区:";
            grb_Info.TextAlignment = ContentAlignment.MiddleLeft;
@@ -293,7 +293,7 @@
            rich_Info.Name = "rich_Info";
            rich_Info.Padding = new Padding(2);
            rich_Info.ShowText = false;
            rich_Info.Size = new Size(1416, 164);
            rich_Info.Size = new Size(1416, 143);
            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
@@ -3833,6 +3833,61 @@
        }
        /// <summary>
        /// å›¾åƒå¢žå¼ºç®—法-边缘增强
        /// </summary>
        /// <param name="ho_Image">待测图片</param>
        /// <param name="hv_Wid">掩膜宽</param>
        /// <param name="hv_High">掩膜高</param>
        /// <param name="hv_Fac">增强因子</param>
        /// <param name="hv_Row1">起始纵坐标</param>
        /// <param name="hv_Column1">起始横坐标</param>
        /// <param name="hv_Row2">结束纵坐标</param>
        /// <param name="hv_Column2">结束横坐标</param>
        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
            {
                HTuple hv_ImageEnhancementTypeOut = new HTuple();
                hv_ImageEnhancementTypeOut.Dispose();
                hv_ImageEnhancementTypeOut = new HTuple(hv_ImageEnhancementType);
                hv_Wid.Dispose();
                hv_High.Dispose();
                ho_OutImage.Dispose();
                //设置图像增强算法
                if ((int)(new HTuple(hv_ImageEnhancementTypeOut.TupleEqual("emphasize"))) != 0)
                {
                    hv_ImageEnhancementTypeOut.Dispose();
                    hv_ImageEnhancementTypeOut = "emphasize";
                    HOperatorSet.Emphasize(ho_Image, out ho_OutImage, hv_Wid, hv_High, hv_Fac);
                }
                else if ((int)(new HTuple(hv_ImageEnhancementTypeOut.TupleEqual("equHisto"))) != 0)
                {
                    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)
            {
                hv_Wid.Dispose();
                hv_High.Dispose();
                throw HDevExpDefaultException;
            }
        }
        /// <summary>
        /// å¡å°ºç®—法
        /// </summary>
        /// <param name="ho_Image">待测图片</param>
LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.Designer.cs
@@ -155,9 +155,9 @@
            // tablePanelParas
            // 
            tablePanelParas.ColumnCount = 4;
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 90F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 116F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 90F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 116F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
            tablePanelParas.Controls.Add(dtxtMaxDistDeviation, 3, 7);
            tablePanelParas.Controls.Add(dtxtMinDistDeviation, 1, 7);
@@ -204,8 +204,8 @@
            tablePanelParas.Controls.Add(label32, 2, 7);
            tablePanelParas.Controls.Add(dtxtMinContlength, 1, 4);
            tablePanelParas.Dock = DockStyle.Fill;
            tablePanelParas.Location = new Point(3, 3);
            tablePanelParas.Margin = new Padding(2, 3, 2, 3);
            tablePanelParas.Location = new Point(4, 4);
            tablePanelParas.Margin = new Padding(3, 4, 3, 4);
            tablePanelParas.Name = "tablePanelParas";
            tablePanelParas.RowCount = 12;
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 8.333333F));
@@ -220,284 +220,286 @@
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 8.333333F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 8.333333F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 8.333333F));
            tablePanelParas.Size = new Size(386, 516);
            tablePanelParas.Size = new Size(498, 611);
            tablePanelParas.TabIndex = 0;
            // 
            // dtxtMaxDistDeviation
            // 
            dtxtMaxDistDeviation.Location = new Point(286, 297);
            dtxtMaxDistDeviation.Location = new Point(369, 354);
            dtxtMaxDistDeviation.Margin = new Padding(4);
            dtxtMaxDistDeviation.Name = "dtxtMaxDistDeviation";
            dtxtMaxDistDeviation.Size = new Size(97, 23);
            dtxtMaxDistDeviation.Size = new Size(124, 27);
            dtxtMaxDistDeviation.TabIndex = 36;
            dtxtMaxDistDeviation.Text = "0";
            // 
            // dtxtMinDistDeviation
            // 
            dtxtMinDistDeviation.Location = new Point(93, 297);
            dtxtMinDistDeviation.Location = new Point(120, 354);
            dtxtMinDistDeviation.Margin = new Padding(4);
            dtxtMinDistDeviation.Name = "dtxtMinDistDeviation";
            dtxtMinDistDeviation.Size = new Size(97, 23);
            dtxtMinDistDeviation.Size = new Size(124, 27);
            dtxtMinDistDeviation.TabIndex = 35;
            dtxtMinDistDeviation.Text = "0";
            // 
            // dtxtMaxDistMean
            // 
            dtxtMaxDistMean.Location = new Point(286, 255);
            dtxtMaxDistMean.Location = new Point(369, 304);
            dtxtMaxDistMean.Margin = new Padding(4);
            dtxtMaxDistMean.Name = "dtxtMaxDistMean";
            dtxtMaxDistMean.Size = new Size(97, 23);
            dtxtMaxDistMean.Size = new Size(124, 27);
            dtxtMaxDistMean.TabIndex = 34;
            dtxtMaxDistMean.Text = "0";
            // 
            // dtxtMinDistMean
            // 
            dtxtMinDistMean.Location = new Point(93, 255);
            dtxtMinDistMean.Location = new Point(120, 304);
            dtxtMinDistMean.Margin = new Padding(4);
            dtxtMinDistMean.Name = "dtxtMinDistMean";
            dtxtMinDistMean.Size = new Size(97, 23);
            dtxtMinDistMean.Size = new Size(124, 27);
            dtxtMinDistMean.TabIndex = 33;
            dtxtMinDistMean.Text = "0";
            // 
            // dtxtMaxAnisometry
            // 
            dtxtMaxAnisometry.Location = new Point(286, 213);
            dtxtMaxAnisometry.Location = new Point(369, 254);
            dtxtMaxAnisometry.Margin = new Padding(4);
            dtxtMaxAnisometry.Name = "dtxtMaxAnisometry";
            dtxtMaxAnisometry.Size = new Size(97, 23);
            dtxtMaxAnisometry.Size = new Size(124, 27);
            dtxtMaxAnisometry.TabIndex = 32;
            dtxtMaxAnisometry.Text = "0";
            // 
            // dtxtMinAnisometry
            // 
            dtxtMinAnisometry.Location = new Point(93, 213);
            dtxtMinAnisometry.Location = new Point(120, 254);
            dtxtMinAnisometry.Margin = new Padding(4);
            dtxtMinAnisometry.Name = "dtxtMinAnisometry";
            dtxtMinAnisometry.Size = new Size(97, 23);
            dtxtMinAnisometry.Size = new Size(124, 27);
            dtxtMinAnisometry.TabIndex = 31;
            dtxtMinAnisometry.Text = "0";
            // 
            // dtxtMaxContlength
            // 
            dtxtMaxContlength.Location = new Point(286, 171);
            dtxtMaxContlength.Location = new Point(369, 204);
            dtxtMaxContlength.Margin = new Padding(4);
            dtxtMaxContlength.Name = "dtxtMaxContlength";
            dtxtMaxContlength.Size = new Size(97, 23);
            dtxtMaxContlength.Size = new Size(124, 27);
            dtxtMaxContlength.TabIndex = 30;
            dtxtMaxContlength.Text = "0";
            // 
            // label1
            // 
            label1.AutoSize = true;
            label1.Location = new Point(2, 0);
            label1.Margin = new Padding(2, 0, 2, 0);
            label1.MaximumSize = new Size(0, 28);
            label1.MinimumSize = new Size(0, 28);
            label1.Location = new Point(3, 0);
            label1.MaximumSize = new Size(0, 33);
            label1.MinimumSize = new Size(0, 33);
            label1.Name = "label1";
            label1.Size = new Size(68, 28);
            label1.Size = new Size(84, 33);
            label1.TabIndex = 0;
            label1.Text = "最小灰度值";
            label1.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMinThreshold
            // 
            dtxtMinThreshold.Location = new Point(92, 3);
            dtxtMinThreshold.Margin = new Padding(2, 3, 2, 3);
            dtxtMinThreshold.Location = new Point(119, 4);
            dtxtMinThreshold.Margin = new Padding(3, 4, 3, 4);
            dtxtMinThreshold.Name = "dtxtMinThreshold";
            dtxtMinThreshold.Size = new Size(99, 23);
            dtxtMinThreshold.Size = new Size(126, 27);
            dtxtMinThreshold.TabIndex = 5;
            dtxtMinThreshold.Text = "0";
            // 
            // label2
            // 
            label2.AutoSize = true;
            label2.Location = new Point(195, 0);
            label2.Margin = new Padding(2, 0, 2, 0);
            label2.MaximumSize = new Size(0, 28);
            label2.MinimumSize = new Size(0, 28);
            label2.Location = new Point(252, 0);
            label2.MaximumSize = new Size(0, 33);
            label2.MinimumSize = new Size(0, 33);
            label2.Name = "label2";
            label2.Size = new Size(68, 28);
            label2.Size = new Size(84, 33);
            label2.TabIndex = 1;
            label2.Text = "最大灰度值";
            label2.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMaxThreshold
            // 
            dtxtMaxThreshold.Location = new Point(285, 3);
            dtxtMaxThreshold.Margin = new Padding(2, 3, 2, 3);
            dtxtMaxThreshold.Location = new Point(368, 4);
            dtxtMaxThreshold.Margin = new Padding(3, 4, 3, 4);
            dtxtMaxThreshold.Name = "dtxtMaxThreshold";
            dtxtMaxThreshold.Size = new Size(98, 23);
            dtxtMaxThreshold.Size = new Size(125, 27);
            dtxtMaxThreshold.TabIndex = 6;
            dtxtMaxThreshold.Text = "255";
            // 
            // label3
            // 
            label3.AutoSize = true;
            label3.Location = new Point(2, 42);
            label3.Margin = new Padding(2, 0, 2, 0);
            label3.MaximumSize = new Size(0, 28);
            label3.MinimumSize = new Size(0, 28);
            label3.Location = new Point(3, 50);
            label3.MaximumSize = new Size(0, 33);
            label3.MinimumSize = new Size(0, 33);
            label3.Name = "label3";
            label3.Size = new Size(56, 28);
            label3.Size = new Size(69, 33);
            label3.TabIndex = 2;
            label3.Text = "最小面积";
            label3.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMinArea
            // 
            dtxtMinArea.Location = new Point(92, 45);
            dtxtMinArea.Margin = new Padding(2, 3, 2, 3);
            dtxtMinArea.Location = new Point(119, 54);
            dtxtMinArea.Margin = new Padding(3, 4, 3, 4);
            dtxtMinArea.Name = "dtxtMinArea";
            dtxtMinArea.Size = new Size(99, 23);
            dtxtMinArea.Size = new Size(126, 27);
            dtxtMinArea.TabIndex = 7;
            dtxtMinArea.Text = "0";
            // 
            // label4
            // 
            label4.AutoSize = true;
            label4.Location = new Point(195, 42);
            label4.Margin = new Padding(2, 0, 2, 0);
            label4.MaximumSize = new Size(0, 28);
            label4.MinimumSize = new Size(0, 28);
            label4.Location = new Point(252, 50);
            label4.MaximumSize = new Size(0, 33);
            label4.MinimumSize = new Size(0, 33);
            label4.Name = "label4";
            label4.Size = new Size(56, 28);
            label4.Size = new Size(69, 33);
            label4.TabIndex = 3;
            label4.Text = "最大面积";
            label4.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMaxArea
            // 
            dtxtMaxArea.Location = new Point(285, 45);
            dtxtMaxArea.Margin = new Padding(2, 3, 2, 3);
            dtxtMaxArea.Location = new Point(368, 54);
            dtxtMaxArea.Margin = new Padding(3, 4, 3, 4);
            dtxtMaxArea.Name = "dtxtMaxArea";
            dtxtMaxArea.Size = new Size(98, 23);
            dtxtMaxArea.Size = new Size(125, 27);
            dtxtMaxArea.TabIndex = 8;
            dtxtMaxArea.Text = "0";
            // 
            // label10
            // 
            label10.AutoSize = true;
            label10.Location = new Point(2, 84);
            label10.Margin = new Padding(2, 0, 2, 0);
            label10.MaximumSize = new Size(0, 28);
            label10.MinimumSize = new Size(0, 28);
            label10.Location = new Point(3, 100);
            label10.MaximumSize = new Size(0, 33);
            label10.MinimumSize = new Size(0, 33);
            label10.Name = "label10";
            label10.Size = new Size(75, 28);
            label10.Size = new Size(93, 33);
            label10.TabIndex = 9;
            label10.Text = "最小纵坐标Y";
            label10.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMinRow
            // 
            dtxtMinRow.Location = new Point(92, 87);
            dtxtMinRow.Margin = new Padding(2, 3, 2, 3);
            dtxtMinRow.Location = new Point(119, 104);
            dtxtMinRow.Margin = new Padding(3, 4, 3, 4);
            dtxtMinRow.Name = "dtxtMinRow";
            dtxtMinRow.Size = new Size(99, 23);
            dtxtMinRow.Size = new Size(126, 27);
            dtxtMinRow.TabIndex = 9;
            dtxtMinRow.Text = "0";
            // 
            // label11
            // 
            label11.AutoSize = true;
            label11.Location = new Point(195, 84);
            label11.Margin = new Padding(2, 0, 2, 0);
            label11.MaximumSize = new Size(0, 28);
            label11.MinimumSize = new Size(0, 28);
            label11.Location = new Point(252, 100);
            label11.MaximumSize = new Size(0, 33);
            label11.MinimumSize = new Size(0, 33);
            label11.Name = "label11";
            label11.Size = new Size(75, 28);
            label11.Size = new Size(93, 33);
            label11.TabIndex = 10;
            label11.Text = "最大纵坐标Y";
            label11.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMaxRow
            // 
            dtxtMaxRow.Location = new Point(285, 87);
            dtxtMaxRow.Margin = new Padding(2, 3, 2, 3);
            dtxtMaxRow.Location = new Point(368, 104);
            dtxtMaxRow.Margin = new Padding(3, 4, 3, 4);
            dtxtMaxRow.Name = "dtxtMaxRow";
            dtxtMaxRow.Size = new Size(98, 23);
            dtxtMaxRow.Size = new Size(125, 27);
            dtxtMaxRow.TabIndex = 9;
            dtxtMaxRow.Text = "0";
            // 
            // label12
            // 
            label12.AutoSize = true;
            label12.Location = new Point(2, 126);
            label12.Margin = new Padding(2, 0, 2, 0);
            label12.MaximumSize = new Size(0, 28);
            label12.MinimumSize = new Size(0, 28);
            label12.Location = new Point(3, 150);
            label12.MaximumSize = new Size(0, 33);
            label12.MinimumSize = new Size(0, 33);
            label12.Name = "label12";
            label12.Size = new Size(76, 28);
            label12.Size = new Size(94, 33);
            label12.TabIndex = 11;
            label12.Text = "最小横坐标X";
            label12.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMinColumn
            // 
            dtxtMinColumn.Location = new Point(92, 129);
            dtxtMinColumn.Margin = new Padding(2, 3, 2, 3);
            dtxtMinColumn.Location = new Point(119, 154);
            dtxtMinColumn.Margin = new Padding(3, 4, 3, 4);
            dtxtMinColumn.Name = "dtxtMinColumn";
            dtxtMinColumn.Size = new Size(99, 23);
            dtxtMinColumn.Size = new Size(126, 27);
            dtxtMinColumn.TabIndex = 9;
            dtxtMinColumn.Text = "0";
            // 
            // label13
            // 
            label13.AutoSize = true;
            label13.Location = new Point(195, 126);
            label13.Margin = new Padding(2, 0, 2, 0);
            label13.MaximumSize = new Size(0, 28);
            label13.MinimumSize = new Size(0, 28);
            label13.Location = new Point(252, 150);
            label13.MaximumSize = new Size(0, 33);
            label13.MinimumSize = new Size(0, 33);
            label13.Name = "label13";
            label13.Size = new Size(76, 28);
            label13.Size = new Size(94, 33);
            label13.TabIndex = 12;
            label13.Text = "最大横坐标X";
            label13.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMaxColumn
            // 
            dtxtMaxColumn.Location = new Point(285, 129);
            dtxtMaxColumn.Margin = new Padding(2, 3, 2, 3);
            dtxtMaxColumn.Location = new Point(368, 154);
            dtxtMaxColumn.Margin = new Padding(3, 4, 3, 4);
            dtxtMaxColumn.Name = "dtxtMaxColumn";
            dtxtMaxColumn.Size = new Size(98, 23);
            dtxtMaxColumn.Size = new Size(125, 27);
            dtxtMaxColumn.TabIndex = 9;
            dtxtMaxColumn.Text = "0";
            // 
            // label19
            // 
            label19.AutoSize = true;
            label19.Location = new Point(3, 462);
            label19.Location = new Point(4, 550);
            label19.Margin = new Padding(4, 0, 4, 0);
            label19.Name = "label19";
            label19.Size = new Size(56, 17);
            label19.Size = new Size(69, 20);
            label19.TabIndex = 19;
            label19.Text = "最小数量";
            // 
            // dtxtMinCount
            // 
            dtxtMinCount.Location = new Point(93, 465);
            dtxtMinCount.Location = new Point(120, 554);
            dtxtMinCount.Margin = new Padding(4);
            dtxtMinCount.Name = "dtxtMinCount";
            dtxtMinCount.Size = new Size(97, 23);
            dtxtMinCount.Size = new Size(124, 27);
            dtxtMinCount.TabIndex = 17;
            dtxtMinCount.Text = "0";
            // 
            // label20
            // 
            label20.AutoSize = true;
            label20.Location = new Point(196, 462);
            label20.Location = new Point(253, 550);
            label20.Margin = new Padding(4, 0, 4, 0);
            label20.Name = "label20";
            label20.Size = new Size(56, 17);
            label20.Size = new Size(69, 20);
            label20.TabIndex = 20;
            label20.Text = "最大数量";
            // 
            // dtxtMaxCount
            // 
            dtxtMaxCount.Location = new Point(286, 465);
            dtxtMaxCount.Location = new Point(369, 554);
            dtxtMaxCount.Margin = new Padding(4);
            dtxtMaxCount.Name = "dtxtMaxCount";
            dtxtMaxCount.Size = new Size(97, 23);
            dtxtMaxCount.Size = new Size(124, 27);
            dtxtMaxCount.TabIndex = 18;
            dtxtMaxCount.Text = "9999";
            // 
            // label16
            // 
            label16.AutoSize = true;
            label16.Location = new Point(2, 378);
            label16.Margin = new Padding(2, 0, 2, 0);
            label16.MaximumSize = new Size(0, 28);
            label16.MinimumSize = new Size(0, 28);
            label16.Location = new Point(3, 450);
            label16.MaximumSize = new Size(0, 33);
            label16.MinimumSize = new Size(0, 33);
            label16.Name = "label16";
            label16.Size = new Size(68, 28);
            label16.Size = new Size(84, 33);
            label16.TabIndex = 15;
            label16.Text = "最小矩形度";
            label16.TextAlign = ContentAlignment.MiddleCenter;
@@ -505,173 +507,180 @@
            // label14
            // 
            label14.AutoSize = true;
            label14.Location = new Point(2, 336);
            label14.Margin = new Padding(2, 0, 2, 0);
            label14.MaximumSize = new Size(0, 28);
            label14.MinimumSize = new Size(0, 28);
            label14.Location = new Point(3, 400);
            label14.MaximumSize = new Size(0, 33);
            label14.MinimumSize = new Size(0, 33);
            label14.Name = "label14";
            label14.Size = new Size(56, 28);
            label14.Size = new Size(69, 33);
            label14.TabIndex = 13;
            label14.Text = "最小圆度";
            label14.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMinRectangularity
            // 
            dtxtMinRectangularity.Location = new Point(92, 381);
            dtxtMinRectangularity.Margin = new Padding(2, 3, 2, 3);
            dtxtMinRectangularity.Location = new Point(119, 454);
            dtxtMinRectangularity.Margin = new Padding(3, 4, 3, 4);
            dtxtMinRectangularity.Name = "dtxtMinRectangularity";
            dtxtMinRectangularity.Size = new Size(98, 23);
            dtxtMinRectangularity.Size = new Size(125, 27);
            dtxtMinRectangularity.TabIndex = 9;
            dtxtMinRectangularity.Text = "0";
            // 
            // dtxtMinCircularity
            // 
            dtxtMinCircularity.Location = new Point(92, 339);
            dtxtMinCircularity.Margin = new Padding(2, 3, 2, 3);
            dtxtMinCircularity.Location = new Point(119, 404);
            dtxtMinCircularity.Margin = new Padding(3, 4, 3, 4);
            dtxtMinCircularity.Name = "dtxtMinCircularity";
            dtxtMinCircularity.Size = new Size(98, 23);
            dtxtMinCircularity.Size = new Size(125, 27);
            dtxtMinCircularity.TabIndex = 9;
            dtxtMinCircularity.Text = "0";
            // 
            // label17
            // 
            label17.AutoSize = true;
            label17.Location = new Point(195, 378);
            label17.Margin = new Padding(2, 0, 2, 0);
            label17.MaximumSize = new Size(0, 28);
            label17.MinimumSize = new Size(0, 28);
            label17.Location = new Point(252, 450);
            label17.MaximumSize = new Size(0, 33);
            label17.MinimumSize = new Size(0, 33);
            label17.Name = "label17";
            label17.Size = new Size(68, 28);
            label17.Size = new Size(84, 33);
            label17.TabIndex = 16;
            label17.Text = "最大矩形度";
            label17.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMaxRectangularity
            // 
            dtxtMaxRectangularity.Location = new Point(285, 381);
            dtxtMaxRectangularity.Margin = new Padding(2, 3, 2, 3);
            dtxtMaxRectangularity.Location = new Point(368, 454);
            dtxtMaxRectangularity.Margin = new Padding(3, 4, 3, 4);
            dtxtMaxRectangularity.Name = "dtxtMaxRectangularity";
            dtxtMaxRectangularity.Size = new Size(98, 23);
            dtxtMaxRectangularity.Size = new Size(125, 27);
            dtxtMaxRectangularity.TabIndex = 10;
            dtxtMaxRectangularity.Text = "1";
            // 
            // label15
            // 
            label15.AutoSize = true;
            label15.Location = new Point(195, 336);
            label15.Margin = new Padding(2, 0, 2, 0);
            label15.MaximumSize = new Size(0, 28);
            label15.MinimumSize = new Size(0, 28);
            label15.Location = new Point(252, 400);
            label15.MaximumSize = new Size(0, 33);
            label15.MinimumSize = new Size(0, 33);
            label15.Name = "label15";
            label15.Size = new Size(56, 28);
            label15.Size = new Size(69, 33);
            label15.TabIndex = 14;
            label15.Text = "最大圆度";
            label15.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMaxCircularity
            // 
            dtxtMaxCircularity.Location = new Point(285, 339);
            dtxtMaxCircularity.Margin = new Padding(2, 3, 2, 3);
            dtxtMaxCircularity.Location = new Point(368, 404);
            dtxtMaxCircularity.Margin = new Padding(3, 4, 3, 4);
            dtxtMaxCircularity.Name = "dtxtMaxCircularity";
            dtxtMaxCircularity.Size = new Size(98, 23);
            dtxtMaxCircularity.Size = new Size(125, 27);
            dtxtMaxCircularity.TabIndex = 9;
            dtxtMaxCircularity.Text = "1";
            // 
            // label25
            // 
            label25.AutoSize = true;
            label25.Location = new Point(3, 168);
            label25.Location = new Point(4, 200);
            label25.Margin = new Padding(4, 0, 4, 0);
            label25.Name = "label25";
            label25.Size = new Size(56, 17);
            label25.Size = new Size(69, 20);
            label25.TabIndex = 21;
            label25.Text = "最小周长";
            // 
            // label26
            // 
            label26.AutoSize = true;
            label26.Location = new Point(3, 210);
            label26.Location = new Point(4, 250);
            label26.Margin = new Padding(4, 0, 4, 0);
            label26.Name = "label26";
            label26.Size = new Size(68, 17);
            label26.Size = new Size(84, 20);
            label26.TabIndex = 22;
            label26.Text = "最小宽高比";
            // 
            // label27
            // 
            label27.AutoSize = true;
            label27.Location = new Point(3, 252);
            label27.Location = new Point(4, 300);
            label27.Margin = new Padding(4, 0, 4, 0);
            label27.Name = "label27";
            label27.Size = new Size(80, 17);
            label27.Size = new Size(99, 20);
            label27.TabIndex = 23;
            label27.Text = "边距最小平均";
            // 
            // label28
            // 
            label28.AutoSize = true;
            label28.Location = new Point(3, 294);
            label28.Location = new Point(4, 350);
            label28.Margin = new Padding(4, 0, 4, 0);
            label28.Name = "label28";
            label28.Size = new Size(80, 17);
            label28.Size = new Size(99, 20);
            label28.TabIndex = 24;
            label28.Text = "边距最小方差";
            // 
            // label29
            // 
            label29.AutoSize = true;
            label29.Location = new Point(196, 168);
            label29.Location = new Point(253, 200);
            label29.Margin = new Padding(4, 0, 4, 0);
            label29.Name = "label29";
            label29.Size = new Size(56, 17);
            label29.Size = new Size(69, 20);
            label29.TabIndex = 25;
            label29.Text = "最大周长";
            // 
            // label30
            // 
            label30.AutoSize = true;
            label30.Location = new Point(196, 210);
            label30.Location = new Point(253, 250);
            label30.Margin = new Padding(4, 0, 4, 0);
            label30.Name = "label30";
            label30.Size = new Size(68, 17);
            label30.Size = new Size(84, 20);
            label30.TabIndex = 26;
            label30.Text = "最大宽高比";
            // 
            // label31
            // 
            label31.AutoSize = true;
            label31.Location = new Point(196, 252);
            label31.Location = new Point(253, 300);
            label31.Margin = new Padding(4, 0, 4, 0);
            label31.Name = "label31";
            label31.Size = new Size(80, 17);
            label31.Size = new Size(99, 20);
            label31.TabIndex = 27;
            label31.Text = "边距最大平均";
            // 
            // label32
            // 
            label32.AutoSize = true;
            label32.Location = new Point(196, 294);
            label32.Location = new Point(253, 350);
            label32.Margin = new Padding(4, 0, 4, 0);
            label32.Name = "label32";
            label32.Size = new Size(80, 17);
            label32.Size = new Size(99, 20);
            label32.TabIndex = 28;
            label32.Text = "边距最大方差";
            // 
            // dtxtMinContlength
            // 
            dtxtMinContlength.Location = new Point(93, 171);
            dtxtMinContlength.Location = new Point(120, 204);
            dtxtMinContlength.Margin = new Padding(4);
            dtxtMinContlength.Name = "dtxtMinContlength";
            dtxtMinContlength.Size = new Size(97, 23);
            dtxtMinContlength.Size = new Size(124, 27);
            dtxtMinContlength.TabIndex = 29;
            dtxtMinContlength.Text = "0";
            // 
            // pnlInputImage
            // 
            pnlInputImage.Dock = DockStyle.Fill;
            pnlInputImage.Location = new Point(3, 3);
            pnlInputImage.Margin = new Padding(4);
            pnlInputImage.Location = new Point(4, 4);
            pnlInputImage.Margin = new Padding(5);
            pnlInputImage.Name = "pnlInputImage";
            pnlInputImage.Size = new Size(626, 516);
            pnlInputImage.Size = new Size(807, 611);
            pnlInputImage.TabIndex = 44;
            // 
            // TopToolStrip
            // 
            TopToolStrip.ImageScalingSize = new Size(20, 20);
            TopToolStrip.Items.AddRange(new ToolStripItem[] { btnRun, btnLoadImage, btnSaveParas, btnLoadParas });
            TopToolStrip.Location = new Point(0, 0);
            TopToolStrip.Name = "TopToolStrip";
            TopToolStrip.Size = new Size(1044, 25);
            TopToolStrip.Size = new Size(1342, 27);
            TopToolStrip.TabIndex = 45;
            TopToolStrip.Text = "toolStrip1";
            // 
@@ -680,7 +689,7 @@
            btnRun.BackgroundImageLayout = ImageLayout.Zoom;
            btnRun.ImageTransparentColor = Color.Magenta;
            btnRun.Name = "btnRun";
            btnRun.Size = new Size(36, 22);
            btnRun.Size = new Size(43, 24);
            btnRun.Text = "运行";
            btnRun.Click += btnRun_Click;
            // 
@@ -688,7 +697,7 @@
            // 
            btnLoadImage.ImageTransparentColor = Color.Magenta;
            btnLoadImage.Name = "btnLoadImage";
            btnLoadImage.Size = new Size(36, 22);
            btnLoadImage.Size = new Size(43, 24);
            btnLoadImage.Text = "导图";
            btnLoadImage.Click += btnLoadImage_Click;
            // 
@@ -696,7 +705,7 @@
            // 
            btnSaveParas.ImageTransparentColor = Color.Magenta;
            btnSaveParas.Name = "btnSaveParas";
            btnSaveParas.Size = new Size(36, 22);
            btnSaveParas.Size = new Size(43, 24);
            btnSaveParas.Text = "保存";
            btnSaveParas.Click += btnSaveParas_Click;
            // 
@@ -704,35 +713,37 @@
            // 
            btnLoadParas.ImageTransparentColor = Color.Magenta;
            btnLoadParas.Name = "btnLoadParas";
            btnLoadParas.Size = new Size(36, 22);
            btnLoadParas.Size = new Size(43, 24);
            btnLoadParas.Text = "加载";
            btnLoadParas.Click += btnLoadParas_Click;
            // 
            // BtmStatusStrip
            // 
            BtmStatusStrip.ImageScalingSize = new Size(20, 20);
            BtmStatusStrip.Items.AddRange(new ToolStripItem[] { lblResult, lblMsg, lblRunTime });
            BtmStatusStrip.Location = new Point(0, 577);
            BtmStatusStrip.Location = new Point(0, 679);
            BtmStatusStrip.Name = "BtmStatusStrip";
            BtmStatusStrip.Size = new Size(1044, 22);
            BtmStatusStrip.Padding = new Padding(1, 0, 18, 0);
            BtmStatusStrip.Size = new Size(1342, 26);
            BtmStatusStrip.TabIndex = 46;
            BtmStatusStrip.Text = "statusStrip1";
            // 
            // lblResult
            // 
            lblResult.Name = "lblResult";
            lblResult.Size = new Size(34, 17);
            lblResult.Size = new Size(42, 20);
            lblResult.Text = "True";
            // 
            // lblMsg
            // 
            lblMsg.Name = "lblMsg";
            lblMsg.Size = new Size(56, 17);
            lblMsg.Size = new Size(69, 20);
            lblMsg.Text = "运行成功";
            // 
            // lblRunTime
            // 
            lblRunTime.Name = "lblRunTime";
            lblRunTime.Size = new Size(32, 17);
            lblRunTime.Size = new Size(39, 20);
            lblRunTime.Text = "0ms";
            // 
            // parasTabControl
@@ -742,18 +753,20 @@
            parasTabControl.Controls.Add(tabPage2);
            parasTabControl.Dock = DockStyle.Fill;
            parasTabControl.Location = new Point(0, 0);
            parasTabControl.Margin = new Padding(4);
            parasTabControl.Name = "parasTabControl";
            parasTabControl.SelectedIndex = 0;
            parasTabControl.Size = new Size(400, 552);
            parasTabControl.Size = new Size(514, 652);
            parasTabControl.TabIndex = 48;
            // 
            // tabPage1
            // 
            tabPage1.Controls.Add(tablePanelParas);
            tabPage1.Location = new Point(4, 26);
            tabPage1.Location = new Point(4, 29);
            tabPage1.Margin = new Padding(4);
            tabPage1.Name = "tabPage1";
            tabPage1.Padding = new Padding(3);
            tabPage1.Size = new Size(392, 522);
            tabPage1.Padding = new Padding(4);
            tabPage1.Size = new Size(506, 619);
            tabPage1.TabIndex = 0;
            tabPage1.Text = "输入参数";
            tabPage1.UseVisualStyleBackColor = true;
@@ -761,9 +774,10 @@
            // tabPage5
            // 
            tabPage5.Controls.Add(tableLayoutPanel2);
            tabPage5.Location = new Point(4, 26);
            tabPage5.Location = new Point(4, 29);
            tabPage5.Margin = new Padding(4);
            tabPage5.Name = "tabPage5";
            tabPage5.Size = new Size(392, 522);
            tabPage5.Size = new Size(506, 619);
            tabPage5.TabIndex = 2;
            tabPage5.Text = "运行参数";
            tabPage5.UseVisualStyleBackColor = true;
@@ -771,9 +785,9 @@
            // tableLayoutPanel2
            // 
            tableLayoutPanel2.ColumnCount = 4;
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 60F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 150F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 40F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 77F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 193F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 51F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel2.Controls.Add(cmbTypeRoi, 1, 0);
            tableLayoutPanel2.Controls.Add(label21, 0, 0);
@@ -786,21 +800,23 @@
            tableLayoutPanel2.Controls.Add(tableLayoutPanel3, 3, 2);
            tableLayoutPanel2.Dock = DockStyle.Fill;
            tableLayoutPanel2.Location = new Point(0, 0);
            tableLayoutPanel2.Margin = new Padding(4);
            tableLayoutPanel2.Name = "tableLayoutPanel2";
            tableLayoutPanel2.RowCount = 3;
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel2.Size = new Size(392, 522);
            tableLayoutPanel2.Size = new Size(506, 619);
            tableLayoutPanel2.TabIndex = 4;
            // 
            // cmbTypeRoi
            // 
            cmbTypeRoi.Dock = DockStyle.Fill;
            cmbTypeRoi.FormattingEnabled = true;
            cmbTypeRoi.Location = new Point(63, 3);
            cmbTypeRoi.Location = new Point(81, 4);
            cmbTypeRoi.Margin = new Padding(4);
            cmbTypeRoi.Name = "cmbTypeRoi";
            cmbTypeRoi.Size = new Size(144, 25);
            cmbTypeRoi.Size = new Size(185, 28);
            cmbTypeRoi.TabIndex = 1;
            cmbTypeRoi.SelectedIndexChanged += cmbTypeRoi_SelectedIndexChanged;
            // 
@@ -808,9 +824,10 @@
            // 
            label21.AutoSize = true;
            label21.Dock = DockStyle.Fill;
            label21.Location = new Point(3, 0);
            label21.Location = new Point(4, 0);
            label21.Margin = new Padding(4, 0, 4, 0);
            label21.Name = "label21";
            label21.Size = new Size(54, 30);
            label21.Size = new Size(69, 35);
            label21.TabIndex = 3;
            label21.Text = "ROI";
            label21.TextAlign = ContentAlignment.MiddleCenter;
@@ -819,9 +836,10 @@
            // 
            label22.AutoSize = true;
            label22.Dock = DockStyle.Fill;
            label22.Location = new Point(3, 30);
            label22.Location = new Point(4, 35);
            label22.Margin = new Padding(4, 0, 4, 0);
            label22.Name = "label22";
            label22.Size = new Size(54, 30);
            label22.Size = new Size(69, 35);
            label22.TabIndex = 4;
            label22.Text = "Fixture";
            label22.TextAlign = ContentAlignment.MiddleCenter;
@@ -830,9 +848,10 @@
            // 
            cmbFixture.Dock = DockStyle.Fill;
            cmbFixture.FormattingEnabled = true;
            cmbFixture.Location = new Point(63, 33);
            cmbFixture.Location = new Point(81, 39);
            cmbFixture.Margin = new Padding(4);
            cmbFixture.Name = "cmbFixture";
            cmbFixture.Size = new Size(144, 25);
            cmbFixture.Size = new Size(185, 28);
            cmbFixture.TabIndex = 5;
            cmbFixture.SelectedIndexChanged += cmbFixture_SelectedIndexChanged;
            // 
@@ -840,9 +859,10 @@
            // 
            ckbDrawRoi.AutoSize = true;
            ckbDrawRoi.CheckAlign = ContentAlignment.MiddleCenter;
            ckbDrawRoi.Location = new Point(213, 3);
            ckbDrawRoi.Location = new Point(274, 4);
            ckbDrawRoi.Margin = new Padding(4);
            ckbDrawRoi.Name = "ckbDrawRoi";
            ckbDrawRoi.Size = new Size(15, 14);
            ckbDrawRoi.Size = new Size(18, 17);
            ckbDrawRoi.TabIndex = 2;
            ckbDrawRoi.UseVisualStyleBackColor = true;
            ckbDrawRoi.CheckedChanged += ckbDrawRoi_CheckedChanged;
@@ -851,9 +871,10 @@
            // 
            ckbListAfter.Dock = DockStyle.Fill;
            ckbListAfter.FormattingEnabled = true;
            ckbListAfter.Location = new Point(63, 63);
            ckbListAfter.Location = new Point(81, 74);
            ckbListAfter.Margin = new Padding(4);
            ckbListAfter.Name = "ckbListAfter";
            ckbListAfter.Size = new Size(144, 456);
            ckbListAfter.Size = new Size(185, 541);
            ckbListAfter.TabIndex = 6;
            // 
            // tableLayoutPanel1
@@ -865,23 +886,25 @@
            tableLayoutPanel1.Controls.Add(btnUp, 0, 2);
            tableLayoutPanel1.Controls.Add(btnDown, 0, 3);
            tableLayoutPanel1.Dock = DockStyle.Fill;
            tableLayoutPanel1.Location = new Point(213, 63);
            tableLayoutPanel1.Location = new Point(274, 74);
            tableLayoutPanel1.Margin = new Padding(4);
            tableLayoutPanel1.Name = "tableLayoutPanel1";
            tableLayoutPanel1.RowCount = 5;
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.Size = new Size(34, 456);
            tableLayoutPanel1.Size = new Size(43, 541);
            tableLayoutPanel1.TabIndex = 7;
            // 
            // btnAdd
            // 
            btnAdd.Dock = DockStyle.Fill;
            btnAdd.Location = new Point(3, 3);
            btnAdd.Location = new Point(4, 4);
            btnAdd.Margin = new Padding(4);
            btnAdd.Name = "btnAdd";
            btnAdd.Size = new Size(28, 24);
            btnAdd.Size = new Size(35, 27);
            btnAdd.TabIndex = 0;
            btnAdd.Text = "+";
            btnAdd.UseVisualStyleBackColor = true;
@@ -889,9 +912,10 @@
            // btnDel
            // 
            btnDel.Dock = DockStyle.Fill;
            btnDel.Location = new Point(3, 33);
            btnDel.Location = new Point(4, 39);
            btnDel.Margin = new Padding(4);
            btnDel.Name = "btnDel";
            btnDel.Size = new Size(28, 24);
            btnDel.Size = new Size(35, 27);
            btnDel.TabIndex = 1;
            btnDel.Text = "-";
            btnDel.UseVisualStyleBackColor = true;
@@ -899,9 +923,10 @@
            // btnUp
            // 
            btnUp.Dock = DockStyle.Fill;
            btnUp.Location = new Point(3, 63);
            btnUp.Location = new Point(4, 74);
            btnUp.Margin = new Padding(4);
            btnUp.Name = "btnUp";
            btnUp.Size = new Size(28, 24);
            btnUp.Size = new Size(35, 27);
            btnUp.TabIndex = 2;
            btnUp.Text = "↑";
            btnUp.UseVisualStyleBackColor = true;
@@ -909,9 +934,10 @@
            // btnDown
            // 
            btnDown.Dock = DockStyle.Fill;
            btnDown.Location = new Point(3, 93);
            btnDown.Location = new Point(4, 109);
            btnDown.Margin = new Padding(4);
            btnDown.Name = "btnDown";
            btnDown.Size = new Size(28, 24);
            btnDown.Size = new Size(35, 27);
            btnDown.TabIndex = 3;
            btnDown.Text = "↓";
            btnDown.UseVisualStyleBackColor = true;
@@ -920,9 +946,10 @@
            // 
            label24.AutoSize = true;
            label24.Dock = DockStyle.Fill;
            label24.Location = new Point(3, 60);
            label24.Location = new Point(4, 70);
            label24.Margin = new Padding(4, 0, 4, 0);
            label24.Name = "label24";
            label24.Size = new Size(54, 462);
            label24.Size = new Size(69, 549);
            label24.TabIndex = 8;
            label24.Text = "形态学";
            label24.TextAlign = ContentAlignment.TopCenter;
@@ -930,46 +957,50 @@
            // tableLayoutPanel3
            // 
            tableLayoutPanel3.ColumnCount = 1;
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 60F));
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 175F));
            tableLayoutPanel3.Controls.Add(cmbProcessType, 0, 1);
            tableLayoutPanel3.Controls.Add(cmbShapeType, 0, 2);
            tableLayoutPanel3.Controls.Add(lblTips, 0, 3);
            tableLayoutPanel3.Controls.Add(tableLayoutPanel4, 0, 0);
            tableLayoutPanel3.Dock = DockStyle.Fill;
            tableLayoutPanel3.Location = new Point(253, 63);
            tableLayoutPanel3.Location = new Point(325, 74);
            tableLayoutPanel3.Margin = new Padding(4);
            tableLayoutPanel3.Name = "tableLayoutPanel3";
            tableLayoutPanel3.RowCount = 4;
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Absolute, 41F));
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel3.Size = new Size(136, 456);
            tableLayoutPanel3.Size = new Size(177, 541);
            tableLayoutPanel3.TabIndex = 9;
            // 
            // cmbProcessType
            // 
            cmbProcessType.Dock = DockStyle.Fill;
            cmbProcessType.FormattingEnabled = true;
            cmbProcessType.Location = new Point(3, 38);
            cmbProcessType.Location = new Point(4, 45);
            cmbProcessType.Margin = new Padding(4);
            cmbProcessType.Name = "cmbProcessType";
            cmbProcessType.Size = new Size(130, 25);
            cmbProcessType.Size = new Size(169, 28);
            cmbProcessType.TabIndex = 3;
            // 
            // cmbShapeType
            // 
            cmbShapeType.Dock = DockStyle.Fill;
            cmbShapeType.FormattingEnabled = true;
            cmbShapeType.Location = new Point(3, 68);
            cmbShapeType.Location = new Point(4, 80);
            cmbShapeType.Margin = new Padding(4);
            cmbShapeType.Name = "cmbShapeType";
            cmbShapeType.Size = new Size(130, 25);
            cmbShapeType.Size = new Size(169, 28);
            cmbShapeType.TabIndex = 5;
            // 
            // lblTips
            // 
            lblTips.AutoSize = true;
            lblTips.Location = new Point(3, 95);
            lblTips.Location = new Point(4, 111);
            lblTips.Margin = new Padding(4, 0, 4, 0);
            lblTips.Name = "lblTips";
            lblTips.Size = new Size(32, 17);
            lblTips.Size = new Size(39, 20);
            lblTips.TabIndex = 6;
            lblTips.Text = "提示";
            // 
@@ -980,38 +1011,42 @@
            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
            tableLayoutPanel4.Controls.Add(txtAfterProcessWidth, 0, 0);
            tableLayoutPanel4.Controls.Add(txtAfterProcessHeight, 1, 0);
            tableLayoutPanel4.Location = new Point(3, 3);
            tableLayoutPanel4.Location = new Point(4, 4);
            tableLayoutPanel4.Margin = new Padding(4);
            tableLayoutPanel4.Name = "tableLayoutPanel4";
            tableLayoutPanel4.RowCount = 1;
            tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
            tableLayoutPanel4.Size = new Size(130, 29);
            tableLayoutPanel4.Size = new Size(167, 33);
            tableLayoutPanel4.TabIndex = 7;
            // 
            // txtAfterProcessWidth
            // 
            txtAfterProcessWidth.Dock = DockStyle.Fill;
            txtAfterProcessWidth.Location = new Point(3, 3);
            txtAfterProcessWidth.Location = new Point(4, 4);
            txtAfterProcessWidth.Margin = new Padding(4);
            txtAfterProcessWidth.Name = "txtAfterProcessWidth";
            txtAfterProcessWidth.Size = new Size(59, 23);
            txtAfterProcessWidth.Size = new Size(75, 27);
            txtAfterProcessWidth.TabIndex = 4;
            txtAfterProcessWidth.Value = new decimal(new int[] { 3, 0, 0, 0 });
            // 
            // txtAfterProcessHeight
            // 
            txtAfterProcessHeight.Dock = DockStyle.Fill;
            txtAfterProcessHeight.Location = new Point(68, 3);
            txtAfterProcessHeight.Location = new Point(87, 4);
            txtAfterProcessHeight.Margin = new Padding(4);
            txtAfterProcessHeight.Name = "txtAfterProcessHeight";
            txtAfterProcessHeight.Size = new Size(59, 23);
            txtAfterProcessHeight.Size = new Size(76, 27);
            txtAfterProcessHeight.TabIndex = 5;
            txtAfterProcessHeight.Value = new decimal(new int[] { 3, 0, 0, 0 });
            // 
            // tabPage2
            // 
            tabPage2.Controls.Add(tableLayoutResults);
            tabPage2.Location = new Point(4, 26);
            tabPage2.Location = new Point(4, 29);
            tabPage2.Margin = new Padding(4);
            tabPage2.Name = "tabPage2";
            tabPage2.Padding = new Padding(3);
            tabPage2.Size = new Size(392, 522);
            tabPage2.Padding = new Padding(4);
            tabPage2.Size = new Size(506, 619);
            tabPage2.TabIndex = 1;
            tabPage2.Text = "输出结果";
            tabPage2.UseVisualStyleBackColor = true;
@@ -1019,7 +1054,7 @@
            // tableLayoutResults
            // 
            tableLayoutResults.ColumnCount = 2;
            tableLayoutResults.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 100F));
            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);
@@ -1036,8 +1071,8 @@
            tableLayoutResults.Controls.Add(label23, 0, 5);
            tableLayoutResults.Controls.Add(dtxtArea, 1, 5);
            tableLayoutResults.Dock = DockStyle.Fill;
            tableLayoutResults.Location = new Point(3, 3);
            tableLayoutResults.Margin = new Padding(2, 3, 2, 3);
            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));
@@ -1050,29 +1085,28 @@
            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(386, 516);
            tableLayoutResults.Size = new Size(498, 611);
            tableLayoutResults.TabIndex = 1;
            // 
            // dtxtHeight
            // 
            dtxtHeight.Dock = DockStyle.Fill;
            dtxtHeight.Location = new Point(102, 207);
            dtxtHeight.Margin = new Padding(2, 3, 2, 3);
            dtxtHeight.Location = new Point(132, 248);
            dtxtHeight.Margin = new Padding(3, 4, 3, 4);
            dtxtHeight.Name = "dtxtHeight";
            dtxtHeight.ReadOnly = true;
            dtxtHeight.Size = new Size(282, 23);
            dtxtHeight.Size = new Size(363, 27);
            dtxtHeight.TabIndex = 9;
            // 
            // label9
            // 
            label9.AutoSize = true;
            label9.Dock = DockStyle.Fill;
            label9.Location = new Point(2, 204);
            label9.Margin = new Padding(2, 0, 2, 0);
            label9.MaximumSize = new Size(0, 28);
            label9.MinimumSize = new Size(0, 28);
            label9.Location = new Point(3, 244);
            label9.MaximumSize = new Size(0, 33);
            label9.MinimumSize = new Size(0, 33);
            label9.Name = "label9";
            label9.Size = new Size(96, 28);
            label9.Size = new Size(123, 33);
            label9.TabIndex = 3;
            label9.Text = "高度";
            label9.TextAlign = ContentAlignment.TopCenter;
@@ -1081,12 +1115,11 @@
            // 
            label5.AutoSize = true;
            label5.Dock = DockStyle.Fill;
            label5.Location = new Point(2, 0);
            label5.Margin = new Padding(2, 0, 2, 0);
            label5.MaximumSize = new Size(0, 28);
            label5.MinimumSize = new Size(0, 28);
            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(96, 28);
            label5.Size = new Size(123, 33);
            label5.TabIndex = 0;
            label5.Text = "X";
            label5.TextAlign = ContentAlignment.TopCenter;
@@ -1095,12 +1128,11 @@
            // 
            label6.AutoSize = true;
            label6.Dock = DockStyle.Fill;
            label6.Location = new Point(2, 51);
            label6.Margin = new Padding(2, 0, 2, 0);
            label6.MaximumSize = new Size(0, 28);
            label6.MinimumSize = new Size(0, 28);
            label6.Location = new Point(3, 61);
            label6.MaximumSize = new Size(0, 33);
            label6.MinimumSize = new Size(0, 33);
            label6.Name = "label6";
            label6.Size = new Size(96, 28);
            label6.Size = new Size(123, 33);
            label6.TabIndex = 1;
            label6.Text = "Y";
            label6.TextAlign = ContentAlignment.TopCenter;
@@ -1109,12 +1141,11 @@
            // 
            label7.AutoSize = true;
            label7.Dock = DockStyle.Fill;
            label7.Location = new Point(2, 102);
            label7.Margin = new Padding(2, 0, 2, 0);
            label7.MaximumSize = new Size(0, 28);
            label7.MinimumSize = new Size(0, 28);
            label7.Location = new Point(3, 122);
            label7.MaximumSize = new Size(0, 33);
            label7.MinimumSize = new Size(0, 33);
            label7.Name = "label7";
            label7.Size = new Size(96, 28);
            label7.Size = new Size(123, 33);
            label7.TabIndex = 2;
            label7.Text = "弧度(rad)";
            label7.TextAlign = ContentAlignment.TopCenter;
@@ -1123,12 +1154,11 @@
            // 
            label8.AutoSize = true;
            label8.Dock = DockStyle.Fill;
            label8.Location = new Point(2, 153);
            label8.Margin = new Padding(2, 0, 2, 0);
            label8.MaximumSize = new Size(0, 28);
            label8.MinimumSize = new Size(0, 28);
            label8.Location = new Point(3, 183);
            label8.MaximumSize = new Size(0, 33);
            label8.MinimumSize = new Size(0, 33);
            label8.Name = "label8";
            label8.Size = new Size(96, 28);
            label8.Size = new Size(123, 33);
            label8.TabIndex = 3;
            label8.Text = "宽度";
            label8.TextAlign = ContentAlignment.TopCenter;
@@ -1136,50 +1166,51 @@
            // dtxtCenterX
            // 
            dtxtCenterX.Dock = DockStyle.Fill;
            dtxtCenterX.Location = new Point(102, 3);
            dtxtCenterX.Margin = new Padding(2, 3, 2, 3);
            dtxtCenterX.Location = new Point(132, 4);
            dtxtCenterX.Margin = new Padding(3, 4, 3, 4);
            dtxtCenterX.Name = "dtxtCenterX";
            dtxtCenterX.ReadOnly = true;
            dtxtCenterX.Size = new Size(282, 23);
            dtxtCenterX.Size = new Size(363, 27);
            dtxtCenterX.TabIndex = 5;
            // 
            // dtxtCenterY
            // 
            dtxtCenterY.Dock = DockStyle.Fill;
            dtxtCenterY.Location = new Point(102, 54);
            dtxtCenterY.Margin = new Padding(2, 3, 2, 3);
            dtxtCenterY.Location = new Point(132, 65);
            dtxtCenterY.Margin = new Padding(3, 4, 3, 4);
            dtxtCenterY.Name = "dtxtCenterY";
            dtxtCenterY.ReadOnly = true;
            dtxtCenterY.Size = new Size(282, 23);
            dtxtCenterY.Size = new Size(363, 27);
            dtxtCenterY.TabIndex = 6;
            // 
            // dtxtPhi
            // 
            dtxtPhi.Dock = DockStyle.Fill;
            dtxtPhi.Location = new Point(102, 105);
            dtxtPhi.Margin = new Padding(2, 3, 2, 3);
            dtxtPhi.Location = new Point(132, 126);
            dtxtPhi.Margin = new Padding(3, 4, 3, 4);
            dtxtPhi.Name = "dtxtPhi";
            dtxtPhi.ReadOnly = true;
            dtxtPhi.Size = new Size(282, 23);
            dtxtPhi.Size = new Size(363, 27);
            dtxtPhi.TabIndex = 7;
            // 
            // dtxtWidth
            // 
            dtxtWidth.Dock = DockStyle.Fill;
            dtxtWidth.Location = new Point(102, 156);
            dtxtWidth.Margin = new Padding(2, 3, 2, 3);
            dtxtWidth.Location = new Point(132, 187);
            dtxtWidth.Margin = new Padding(3, 4, 3, 4);
            dtxtWidth.Name = "dtxtWidth";
            dtxtWidth.ReadOnly = true;
            dtxtWidth.Size = new Size(282, 23);
            dtxtWidth.Size = new Size(363, 27);
            dtxtWidth.TabIndex = 8;
            // 
            // label18
            // 
            label18.AutoSize = true;
            label18.Dock = DockStyle.Fill;
            label18.Location = new Point(3, 306);
            label18.Location = new Point(4, 366);
            label18.Margin = new Padding(4, 0, 4, 0);
            label18.Name = "label18";
            label18.Size = new Size(94, 51);
            label18.Size = new Size(121, 61);
            label18.TabIndex = 10;
            label18.Text = "数量";
            label18.TextAlign = ContentAlignment.TopCenter;
@@ -1187,19 +1218,21 @@
            // dtxtCount
            // 
            dtxtCount.Dock = DockStyle.Fill;
            dtxtCount.Location = new Point(103, 309);
            dtxtCount.Location = new Point(133, 370);
            dtxtCount.Margin = new Padding(4);
            dtxtCount.Name = "dtxtCount";
            dtxtCount.ReadOnly = true;
            dtxtCount.Size = new Size(280, 23);
            dtxtCount.Size = new Size(361, 27);
            dtxtCount.TabIndex = 11;
            // 
            // label23
            // 
            label23.AutoSize = true;
            label23.Dock = DockStyle.Fill;
            label23.Location = new Point(3, 255);
            label23.Location = new Point(4, 305);
            label23.Margin = new Padding(4, 0, 4, 0);
            label23.Name = "label23";
            label23.Size = new Size(94, 51);
            label23.Size = new Size(121, 61);
            label23.TabIndex = 12;
            label23.Text = "面积";
            label23.TextAlign = ContentAlignment.TopCenter;
@@ -1207,10 +1240,11 @@
            // dtxtArea
            // 
            dtxtArea.Dock = DockStyle.Fill;
            dtxtArea.Location = new Point(103, 258);
            dtxtArea.Location = new Point(133, 309);
            dtxtArea.Margin = new Padding(4);
            dtxtArea.Name = "dtxtArea";
            dtxtArea.ReadOnly = true;
            dtxtArea.Size = new Size(280, 23);
            dtxtArea.Size = new Size(361, 27);
            dtxtArea.TabIndex = 13;
            // 
            // imgTabControl
@@ -1219,18 +1253,20 @@
            imgTabControl.Controls.Add(tabPageRecordImage);
            imgTabControl.Dock = DockStyle.Fill;
            imgTabControl.Location = new Point(0, 0);
            imgTabControl.Margin = new Padding(4);
            imgTabControl.Name = "imgTabControl";
            imgTabControl.SelectedIndex = 0;
            imgTabControl.Size = new Size(640, 552);
            imgTabControl.Size = new Size(823, 652);
            imgTabControl.TabIndex = 49;
            // 
            // tabPageInputImage
            // 
            tabPageInputImage.Controls.Add(pnlInputImage);
            tabPageInputImage.Location = new Point(4, 26);
            tabPageInputImage.Location = new Point(4, 29);
            tabPageInputImage.Margin = new Padding(4);
            tabPageInputImage.Name = "tabPageInputImage";
            tabPageInputImage.Padding = new Padding(3);
            tabPageInputImage.Size = new Size(632, 522);
            tabPageInputImage.Padding = new Padding(4);
            tabPageInputImage.Size = new Size(815, 619);
            tabPageInputImage.TabIndex = 0;
            tabPageInputImage.Text = "输入图像";
            tabPageInputImage.UseVisualStyleBackColor = true;
@@ -1238,10 +1274,11 @@
            // tabPageRecordImage
            // 
            tabPageRecordImage.Controls.Add(pnlRecordImage);
            tabPageRecordImage.Location = new Point(4, 26);
            tabPageRecordImage.Location = new Point(4, 29);
            tabPageRecordImage.Margin = new Padding(4);
            tabPageRecordImage.Name = "tabPageRecordImage";
            tabPageRecordImage.Padding = new Padding(3);
            tabPageRecordImage.Size = new Size(632, 522);
            tabPageRecordImage.Padding = new Padding(4);
            tabPageRecordImage.Size = new Size(815, 619);
            tabPageRecordImage.TabIndex = 1;
            tabPageRecordImage.Text = "结果图像";
            tabPageRecordImage.UseVisualStyleBackColor = true;
@@ -1249,16 +1286,17 @@
            // pnlRecordImage
            // 
            pnlRecordImage.Dock = DockStyle.Fill;
            pnlRecordImage.Location = new Point(3, 3);
            pnlRecordImage.Margin = new Padding(4);
            pnlRecordImage.Location = new Point(4, 4);
            pnlRecordImage.Margin = new Padding(5);
            pnlRecordImage.Name = "pnlRecordImage";
            pnlRecordImage.Size = new Size(626, 516);
            pnlRecordImage.Size = new Size(807, 611);
            pnlRecordImage.TabIndex = 45;
            // 
            // splitContainer1
            // 
            splitContainer1.Dock = DockStyle.Fill;
            splitContainer1.Location = new Point(0, 25);
            splitContainer1.Location = new Point(0, 27);
            splitContainer1.Margin = new Padding(4);
            splitContainer1.Name = "splitContainer1";
            // 
            // splitContainer1.Panel1
@@ -1268,20 +1306,21 @@
            // splitContainer1.Panel2
            // 
            splitContainer1.Panel2.Controls.Add(imgTabControl);
            splitContainer1.Size = new Size(1044, 552);
            splitContainer1.SplitterDistance = 400;
            splitContainer1.Size = new Size(1342, 652);
            splitContainer1.SplitterDistance = 514;
            splitContainer1.SplitterWidth = 5;
            splitContainer1.TabIndex = 48;
            // 
            // HBlobToolEdit
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleDimensions = new SizeF(9F, 20F);
            AutoScaleMode = AutoScaleMode.Font;
            Controls.Add(splitContainer1);
            Controls.Add(BtmStatusStrip);
            Controls.Add(TopToolStrip);
            Margin = new Padding(2, 3, 2, 3);
            Margin = new Padding(3, 4, 3, 4);
            Name = "HBlobToolEdit";
            Size = new Size(1044, 599);
            Size = new Size(1342, 705);
            Load += HBlobToolEdit_Load;
            tablePanelParas.ResumeLayout(false);
            tablePanelParas.PerformLayout();
LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.resx
@@ -121,9 +121,9 @@
    <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>156, 17</value>
    <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>287, 17</value>
    <value>340, 17</value>
  </metadata>
</root>
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.Designer.cs
@@ -91,9 +91,9 @@
            // tablePanelParas
            // 
            tablePanelParas.ColumnCount = 4;
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 90F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 116F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 90F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 116F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
            tablePanelParas.Controls.Add(label1, 0, 0);
            tablePanelParas.Controls.Add(dtxtMinThreshold, 1, 0);
@@ -110,8 +110,8 @@
            tablePanelParas.Controls.Add(label10, 2, 3);
            tablePanelParas.Controls.Add(dtxtCodeLength, 3, 3);
            tablePanelParas.Dock = DockStyle.Fill;
            tablePanelParas.Location = new Point(3, 3);
            tablePanelParas.Margin = new Padding(2, 3, 2, 3);
            tablePanelParas.Location = new Point(4, 4);
            tablePanelParas.Margin = new Padding(3, 4, 3, 4);
            tablePanelParas.Name = "tablePanelParas";
            tablePanelParas.RowCount = 10;
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
@@ -124,71 +124,71 @@
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 10.000001F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 10.000001F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tablePanelParas.Size = new Size(397, 510);
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tablePanelParas.Size = new Size(512, 603);
            tablePanelParas.TabIndex = 0;
            // 
            // label1
            // 
            label1.AutoSize = true;
            label1.Location = new Point(2, 0);
            label1.Margin = new Padding(2, 0, 2, 0);
            label1.MaximumSize = new Size(0, 28);
            label1.MinimumSize = new Size(0, 28);
            label1.Location = new Point(3, 0);
            label1.MaximumSize = new Size(0, 33);
            label1.MinimumSize = new Size(0, 33);
            label1.Name = "label1";
            label1.Size = new Size(68, 28);
            label1.Size = new Size(84, 33);
            label1.TabIndex = 0;
            label1.Text = "最小灰度值";
            label1.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtMinThreshold
            // 
            dtxtMinThreshold.Location = new Point(92, 3);
            dtxtMinThreshold.Margin = new Padding(2, 3, 2, 3);
            dtxtMinThreshold.Location = new Point(119, 4);
            dtxtMinThreshold.Margin = new Padding(3, 4, 3, 4);
            dtxtMinThreshold.Name = "dtxtMinThreshold";
            dtxtMinThreshold.Size = new Size(98, 23);
            dtxtMinThreshold.Size = new Size(125, 27);
            dtxtMinThreshold.TabIndex = 5;
            dtxtMinThreshold.Text = "80";
            // 
            // dtxtMaxThreshold
            // 
            dtxtMaxThreshold.Location = new Point(290, 3);
            dtxtMaxThreshold.Margin = new Padding(2, 3, 2, 3);
            dtxtMaxThreshold.Location = new Point(375, 4);
            dtxtMaxThreshold.Margin = new Padding(3, 4, 3, 4);
            dtxtMaxThreshold.Name = "dtxtMaxThreshold";
            dtxtMaxThreshold.Size = new Size(98, 23);
            dtxtMaxThreshold.Size = new Size(125, 27);
            dtxtMaxThreshold.TabIndex = 6;
            dtxtMaxThreshold.Text = "180";
            // 
            // label19
            // 
            label19.AutoSize = true;
            label19.Location = new Point(3, 51);
            label19.Location = new Point(4, 60);
            label19.Margin = new Padding(4, 0, 4, 0);
            label19.Name = "label19";
            label19.Size = new Size(56, 17);
            label19.Size = new Size(69, 20);
            label19.TabIndex = 19;
            label19.Text = "最小数量";
            // 
            // dtxtMinCount
            // 
            dtxtMinCount.Location = new Point(93, 54);
            dtxtMinCount.Location = new Point(120, 64);
            dtxtMinCount.Margin = new Padding(4, 4, 4, 4);
            dtxtMinCount.Name = "dtxtMinCount";
            dtxtMinCount.Size = new Size(97, 23);
            dtxtMinCount.Size = new Size(124, 27);
            dtxtMinCount.TabIndex = 17;
            dtxtMinCount.Text = "0";
            // 
            // label2
            // 
            label2.AutoSize = true;
            label2.Location = new Point(200, 0);
            label2.Margin = new Padding(2, 0, 2, 0);
            label2.MaximumSize = new Size(0, 28);
            label2.MinimumSize = new Size(0, 28);
            label2.Location = new Point(259, 0);
            label2.MaximumSize = new Size(0, 33);
            label2.MinimumSize = new Size(0, 33);
            label2.Name = "label2";
            label2.Size = new Size(68, 28);
            label2.Size = new Size(84, 33);
            label2.TabIndex = 1;
            label2.Text = "最大灰度值";
            label2.TextAlign = ContentAlignment.MiddleCenter;
@@ -196,84 +196,93 @@
            // label20
            // 
            label20.AutoSize = true;
            label20.Location = new Point(201, 51);
            label20.Location = new Point(260, 60);
            label20.Margin = new Padding(4, 0, 4, 0);
            label20.Name = "label20";
            label20.Size = new Size(56, 17);
            label20.Size = new Size(69, 20);
            label20.TabIndex = 20;
            label20.Text = "最大数量";
            // 
            // dtxtMaxCount
            // 
            dtxtMaxCount.Location = new Point(291, 54);
            dtxtMaxCount.Location = new Point(376, 64);
            dtxtMaxCount.Margin = new Padding(4, 4, 4, 4);
            dtxtMaxCount.Name = "dtxtMaxCount";
            dtxtMaxCount.Size = new Size(97, 23);
            dtxtMaxCount.Size = new Size(124, 27);
            dtxtMaxCount.TabIndex = 18;
            dtxtMaxCount.Text = "9999";
            // 
            // label3
            // 
            label3.AutoSize = true;
            label3.Location = new Point(3, 153);
            label3.Location = new Point(4, 180);
            label3.Margin = new Padding(4, 0, 4, 0);
            label3.Name = "label3";
            label3.Size = new Size(44, 17);
            label3.Size = new Size(54, 20);
            label3.TabIndex = 21;
            label3.Text = "条码头";
            // 
            // stxtCodeHead
            // 
            stxtCodeHead.Location = new Point(93, 156);
            stxtCodeHead.Location = new Point(120, 184);
            stxtCodeHead.Margin = new Padding(4, 4, 4, 4);
            stxtCodeHead.Name = "stxtCodeHead";
            stxtCodeHead.Size = new Size(97, 23);
            stxtCodeHead.Size = new Size(124, 27);
            stxtCodeHead.TabIndex = 22;
            // 
            // label4
            // 
            label4.AutoSize = true;
            label4.Location = new Point(3, 102);
            label4.Location = new Point(4, 120);
            label4.Margin = new Padding(4, 0, 4, 0);
            label4.Name = "label4";
            label4.Size = new Size(56, 17);
            label4.Size = new Size(69, 20);
            label4.TabIndex = 23;
            label4.Text = "条码类型";
            // 
            // cmbCode2dType
            // 
            cmbCode2dType.FormattingEnabled = true;
            cmbCode2dType.Location = new Point(93, 105);
            cmbCode2dType.Location = new Point(120, 124);
            cmbCode2dType.Margin = new Padding(4, 4, 4, 4);
            cmbCode2dType.Name = "cmbCode2dType";
            cmbCode2dType.Size = new Size(97, 25);
            cmbCode2dType.Size = new Size(124, 28);
            cmbCode2dType.TabIndex = 24;
            // 
            // label10
            // 
            label10.AutoSize = true;
            label10.Location = new Point(201, 153);
            label10.Location = new Point(260, 180);
            label10.Margin = new Padding(4, 0, 4, 0);
            label10.Name = "label10";
            label10.Size = new Size(56, 17);
            label10.Size = new Size(69, 20);
            label10.TabIndex = 25;
            label10.Text = "条码长度";
            // 
            // dtxtCodeLength
            // 
            dtxtCodeLength.Location = new Point(291, 156);
            dtxtCodeLength.Location = new Point(376, 184);
            dtxtCodeLength.Margin = new Padding(4, 4, 4, 4);
            dtxtCodeLength.Name = "dtxtCodeLength";
            dtxtCodeLength.Size = new Size(97, 23);
            dtxtCodeLength.Size = new Size(124, 27);
            dtxtCodeLength.TabIndex = 26;
            // 
            // pnlInputImage
            // 
            pnlInputImage.Dock = DockStyle.Fill;
            pnlInputImage.Location = new Point(3, 3);
            pnlInputImage.Margin = new Padding(4);
            pnlInputImage.Location = new Point(4, 4);
            pnlInputImage.Margin = new Padding(5, 5, 5, 5);
            pnlInputImage.Name = "pnlInputImage";
            pnlInputImage.Size = new Size(607, 510);
            pnlInputImage.Size = new Size(782, 603);
            pnlInputImage.TabIndex = 44;
            // 
            // TopToolStrip
            // 
            TopToolStrip.ImageScalingSize = new Size(20, 20);
            TopToolStrip.Items.AddRange(new ToolStripItem[] { btnRun, btnLoadImage, btnSaveParas, btnLoadParas });
            TopToolStrip.Location = new Point(0, 0);
            TopToolStrip.Name = "TopToolStrip";
            TopToolStrip.Size = new Size(1044, 25);
            TopToolStrip.Size = new Size(1342, 27);
            TopToolStrip.TabIndex = 45;
            TopToolStrip.Text = "toolStrip1";
            // 
@@ -282,7 +291,7 @@
            btnRun.BackgroundImageLayout = ImageLayout.Zoom;
            btnRun.ImageTransparentColor = Color.Magenta;
            btnRun.Name = "btnRun";
            btnRun.Size = new Size(36, 22);
            btnRun.Size = new Size(43, 24);
            btnRun.Text = "运行";
            btnRun.Click += btnRun_Click;
            // 
@@ -290,7 +299,7 @@
            // 
            btnLoadImage.ImageTransparentColor = Color.Magenta;
            btnLoadImage.Name = "btnLoadImage";
            btnLoadImage.Size = new Size(36, 22);
            btnLoadImage.Size = new Size(43, 24);
            btnLoadImage.Text = "导图";
            btnLoadImage.Click += btnLoadImage_Click;
            // 
@@ -298,7 +307,7 @@
            // 
            btnSaveParas.ImageTransparentColor = Color.Magenta;
            btnSaveParas.Name = "btnSaveParas";
            btnSaveParas.Size = new Size(36, 22);
            btnSaveParas.Size = new Size(43, 24);
            btnSaveParas.Text = "保存";
            btnSaveParas.Click += btnSaveParas_Click;
            // 
@@ -306,35 +315,37 @@
            // 
            btnLoadParas.ImageTransparentColor = Color.Magenta;
            btnLoadParas.Name = "btnLoadParas";
            btnLoadParas.Size = new Size(36, 22);
            btnLoadParas.Size = new Size(43, 24);
            btnLoadParas.Text = "加载";
            btnLoadParas.Click += btnLoadParas_Click;
            // 
            // BtmStatusStrip
            // 
            BtmStatusStrip.ImageScalingSize = new Size(20, 20);
            BtmStatusStrip.Items.AddRange(new ToolStripItem[] { lblResult, lblMsg, lblRunTime });
            BtmStatusStrip.Location = new Point(0, 577);
            BtmStatusStrip.Location = new Point(0, 679);
            BtmStatusStrip.Name = "BtmStatusStrip";
            BtmStatusStrip.Size = new Size(1044, 22);
            BtmStatusStrip.Padding = new Padding(1, 0, 18, 0);
            BtmStatusStrip.Size = new Size(1342, 26);
            BtmStatusStrip.TabIndex = 46;
            BtmStatusStrip.Text = "statusStrip1";
            // 
            // lblResult
            // 
            lblResult.Name = "lblResult";
            lblResult.Size = new Size(34, 17);
            lblResult.Size = new Size(42, 20);
            lblResult.Text = "True";
            // 
            // lblMsg
            // 
            lblMsg.Name = "lblMsg";
            lblMsg.Size = new Size(56, 17);
            lblMsg.Size = new Size(69, 20);
            lblMsg.Text = "运行成功";
            // 
            // lblRunTime
            // 
            lblRunTime.Name = "lblRunTime";
            lblRunTime.Size = new Size(32, 17);
            lblRunTime.Size = new Size(39, 20);
            lblRunTime.Text = "0ms";
            // 
            // MainTableLayoutPanel
@@ -345,11 +356,12 @@
            MainTableLayoutPanel.Controls.Add(parasTabControl, 0, 0);
            MainTableLayoutPanel.Controls.Add(imgTabControl, 1, 0);
            MainTableLayoutPanel.Dock = DockStyle.Fill;
            MainTableLayoutPanel.Location = new Point(0, 25);
            MainTableLayoutPanel.Location = new Point(0, 27);
            MainTableLayoutPanel.Margin = new Padding(4, 4, 4, 4);
            MainTableLayoutPanel.Name = "MainTableLayoutPanel";
            MainTableLayoutPanel.RowCount = 1;
            MainTableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            MainTableLayoutPanel.Size = new Size(1044, 552);
            MainTableLayoutPanel.Size = new Size(1342, 652);
            MainTableLayoutPanel.TabIndex = 47;
            // 
            // parasTabControl
@@ -358,19 +370,21 @@
            parasTabControl.Controls.Add(tabPage5);
            parasTabControl.Controls.Add(tabPage2);
            parasTabControl.Dock = DockStyle.Fill;
            parasTabControl.Location = new Point(3, 3);
            parasTabControl.Location = new Point(4, 4);
            parasTabControl.Margin = new Padding(4, 4, 4, 4);
            parasTabControl.Name = "parasTabControl";
            parasTabControl.SelectedIndex = 0;
            parasTabControl.Size = new Size(411, 546);
            parasTabControl.Size = new Size(528, 644);
            parasTabControl.TabIndex = 48;
            // 
            // tabPage1
            // 
            tabPage1.Controls.Add(tablePanelParas);
            tabPage1.Location = new Point(4, 26);
            tabPage1.Location = new Point(4, 29);
            tabPage1.Margin = new Padding(4, 4, 4, 4);
            tabPage1.Name = "tabPage1";
            tabPage1.Padding = new Padding(3);
            tabPage1.Size = new Size(403, 516);
            tabPage1.Padding = new Padding(4, 4, 4, 4);
            tabPage1.Size = new Size(520, 611);
            tabPage1.TabIndex = 0;
            tabPage1.Text = "输入参数";
            tabPage1.UseVisualStyleBackColor = true;
@@ -378,9 +392,10 @@
            // tabPage5
            // 
            tabPage5.Controls.Add(tableLayoutPanel2);
            tabPage5.Location = new Point(4, 26);
            tabPage5.Location = new Point(4, 29);
            tabPage5.Margin = new Padding(4, 4, 4, 4);
            tabPage5.Name = "tabPage5";
            tabPage5.Size = new Size(403, 516);
            tabPage5.Size = new Size(520, 611);
            tabPage5.TabIndex = 2;
            tabPage5.Text = "运行参数";
            tabPage5.UseVisualStyleBackColor = true;
@@ -388,30 +403,32 @@
            // tableLayoutPanel2
            // 
            tableLayoutPanel2.ColumnCount = 4;
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 60F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 150F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 77F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 193F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 26F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel2.Controls.Add(cmbTypeRoi, 1, 0);
            tableLayoutPanel2.Controls.Add(label21, 0, 0);
            tableLayoutPanel2.Controls.Add(label22, 0, 1);
            tableLayoutPanel2.Controls.Add(cmbFixture, 1, 1);
            tableLayoutPanel2.Controls.Add(ckbDrawRoi, 2, 0);
            tableLayoutPanel2.Location = new Point(3, 3);
            tableLayoutPanel2.Location = new Point(4, 4);
            tableLayoutPanel2.Margin = new Padding(4, 4, 4, 4);
            tableLayoutPanel2.Name = "tableLayoutPanel2";
            tableLayoutPanel2.RowCount = 3;
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel2.Size = new Size(323, 196);
            tableLayoutPanel2.Size = new Size(415, 231);
            tableLayoutPanel2.TabIndex = 5;
            // 
            // cmbTypeRoi
            // 
            cmbTypeRoi.FormattingEnabled = true;
            cmbTypeRoi.Location = new Point(63, 3);
            cmbTypeRoi.Location = new Point(81, 4);
            cmbTypeRoi.Margin = new Padding(4, 4, 4, 4);
            cmbTypeRoi.Name = "cmbTypeRoi";
            cmbTypeRoi.Size = new Size(121, 25);
            cmbTypeRoi.Size = new Size(154, 28);
            cmbTypeRoi.TabIndex = 1;
            cmbTypeRoi.SelectedIndexChanged += cmbTypeRoi_SelectedIndexChanged;
            // 
@@ -419,9 +436,10 @@
            // 
            label21.AutoSize = true;
            label21.Dock = DockStyle.Fill;
            label21.Location = new Point(3, 0);
            label21.Location = new Point(4, 0);
            label21.Margin = new Padding(4, 0, 4, 0);
            label21.Name = "label21";
            label21.Size = new Size(54, 30);
            label21.Size = new Size(69, 35);
            label21.TabIndex = 3;
            label21.Text = "ROI";
            label21.TextAlign = ContentAlignment.MiddleCenter;
@@ -430,9 +448,10 @@
            // 
            label22.AutoSize = true;
            label22.Dock = DockStyle.Fill;
            label22.Location = new Point(3, 30);
            label22.Location = new Point(4, 35);
            label22.Margin = new Padding(4, 0, 4, 0);
            label22.Name = "label22";
            label22.Size = new Size(54, 30);
            label22.Size = new Size(69, 35);
            label22.TabIndex = 4;
            label22.Text = "Fixture";
            label22.TextAlign = ContentAlignment.MiddleCenter;
@@ -440,9 +459,10 @@
            // cmbFixture
            // 
            cmbFixture.FormattingEnabled = true;
            cmbFixture.Location = new Point(63, 33);
            cmbFixture.Location = new Point(81, 39);
            cmbFixture.Margin = new Padding(4, 4, 4, 4);
            cmbFixture.Name = "cmbFixture";
            cmbFixture.Size = new Size(121, 25);
            cmbFixture.Size = new Size(154, 28);
            cmbFixture.TabIndex = 5;
            cmbFixture.SelectedIndexChanged += cmbFixture_SelectedIndexChanged;
            // 
@@ -450,9 +470,10 @@
            // 
            ckbDrawRoi.AutoSize = true;
            ckbDrawRoi.CheckAlign = ContentAlignment.MiddleCenter;
            ckbDrawRoi.Location = new Point(213, 3);
            ckbDrawRoi.Location = new Point(274, 4);
            ckbDrawRoi.Margin = new Padding(4, 4, 4, 4);
            ckbDrawRoi.Name = "ckbDrawRoi";
            ckbDrawRoi.Size = new Size(14, 14);
            ckbDrawRoi.Size = new Size(18, 17);
            ckbDrawRoi.TabIndex = 2;
            ckbDrawRoi.UseVisualStyleBackColor = true;
            ckbDrawRoi.CheckedChanged += ckbDrawRoi_CheckedChanged;
@@ -460,10 +481,11 @@
            // tabPage2
            // 
            tabPage2.Controls.Add(tableLayoutResults);
            tabPage2.Location = new Point(4, 26);
            tabPage2.Location = new Point(4, 29);
            tabPage2.Margin = new Padding(4, 4, 4, 4);
            tabPage2.Name = "tabPage2";
            tabPage2.Padding = new Padding(3);
            tabPage2.Size = new Size(403, 516);
            tabPage2.Padding = new Padding(4, 4, 4, 4);
            tabPage2.Size = new Size(520, 611);
            tabPage2.TabIndex = 1;
            tabPage2.Text = "输出结果";
            tabPage2.UseVisualStyleBackColor = true;
@@ -471,15 +493,15 @@
            // tableLayoutResults
            // 
            tableLayoutResults.ColumnCount = 2;
            tableLayoutResults.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 100F));
            tableLayoutResults.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 129F));
            tableLayoutResults.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutResults.Controls.Add(label5, 0, 0);
            tableLayoutResults.Controls.Add(stxtCodeStrings, 1, 0);
            tableLayoutResults.Controls.Add(label18, 0, 1);
            tableLayoutResults.Controls.Add(dtxtCount, 1, 1);
            tableLayoutResults.Dock = DockStyle.Fill;
            tableLayoutResults.Location = new Point(3, 3);
            tableLayoutResults.Margin = new Padding(2, 3, 2, 3);
            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));
@@ -492,19 +514,18 @@
            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(397, 510);
            tableLayoutResults.Size = new Size(512, 603);
            tableLayoutResults.TabIndex = 1;
            // 
            // label5
            // 
            label5.AutoSize = true;
            label5.Dock = DockStyle.Fill;
            label5.Location = new Point(2, 0);
            label5.Margin = new Padding(2, 0, 2, 0);
            label5.MaximumSize = new Size(0, 28);
            label5.MinimumSize = new Size(0, 28);
            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(96, 28);
            label5.Size = new Size(123, 33);
            label5.TabIndex = 0;
            label5.Text = "结果";
            label5.TextAlign = ContentAlignment.TopCenter;
@@ -512,21 +533,22 @@
            // stxtCodeStrings
            // 
            stxtCodeStrings.Dock = DockStyle.Fill;
            stxtCodeStrings.Location = new Point(102, 3);
            stxtCodeStrings.Margin = new Padding(2, 3, 2, 3);
            stxtCodeStrings.Location = new Point(132, 4);
            stxtCodeStrings.Margin = new Padding(3, 4, 3, 4);
            stxtCodeStrings.Multiline = true;
            stxtCodeStrings.Name = "stxtCodeStrings";
            stxtCodeStrings.ReadOnly = true;
            stxtCodeStrings.Size = new Size(293, 45);
            stxtCodeStrings.Size = new Size(377, 52);
            stxtCodeStrings.TabIndex = 5;
            // 
            // label18
            // 
            label18.AutoSize = true;
            label18.Dock = DockStyle.Fill;
            label18.Location = new Point(3, 51);
            label18.Location = new Point(4, 60);
            label18.Margin = new Padding(4, 0, 4, 0);
            label18.Name = "label18";
            label18.Size = new Size(94, 51);
            label18.Size = new Size(121, 60);
            label18.TabIndex = 10;
            label18.Text = "数量";
            label18.TextAlign = ContentAlignment.TopCenter;
@@ -534,10 +556,11 @@
            // dtxtCount
            // 
            dtxtCount.Dock = DockStyle.Fill;
            dtxtCount.Location = new Point(103, 54);
            dtxtCount.Location = new Point(133, 64);
            dtxtCount.Margin = new Padding(4, 4, 4, 4);
            dtxtCount.Name = "dtxtCount";
            dtxtCount.ReadOnly = true;
            dtxtCount.Size = new Size(291, 23);
            dtxtCount.Size = new Size(375, 27);
            dtxtCount.TabIndex = 11;
            // 
            // imgTabControl
@@ -545,19 +568,21 @@
            imgTabControl.Controls.Add(tabPageInputImage);
            imgTabControl.Controls.Add(tabPageRecordImage);
            imgTabControl.Dock = DockStyle.Fill;
            imgTabControl.Location = new Point(420, 3);
            imgTabControl.Location = new Point(540, 4);
            imgTabControl.Margin = new Padding(4, 4, 4, 4);
            imgTabControl.Name = "imgTabControl";
            imgTabControl.SelectedIndex = 0;
            imgTabControl.Size = new Size(621, 546);
            imgTabControl.Size = new Size(798, 644);
            imgTabControl.TabIndex = 49;
            // 
            // tabPageInputImage
            // 
            tabPageInputImage.Controls.Add(pnlInputImage);
            tabPageInputImage.Location = new Point(4, 26);
            tabPageInputImage.Location = new Point(4, 29);
            tabPageInputImage.Margin = new Padding(4, 4, 4, 4);
            tabPageInputImage.Name = "tabPageInputImage";
            tabPageInputImage.Padding = new Padding(3);
            tabPageInputImage.Size = new Size(613, 516);
            tabPageInputImage.Padding = new Padding(4, 4, 4, 4);
            tabPageInputImage.Size = new Size(790, 611);
            tabPageInputImage.TabIndex = 0;
            tabPageInputImage.Text = "输入图像";
            tabPageInputImage.UseVisualStyleBackColor = true;
@@ -565,10 +590,11 @@
            // tabPageRecordImage
            // 
            tabPageRecordImage.Controls.Add(pnlRecordImage);
            tabPageRecordImage.Location = new Point(4, 26);
            tabPageRecordImage.Location = new Point(4, 29);
            tabPageRecordImage.Margin = new Padding(4, 4, 4, 4);
            tabPageRecordImage.Name = "tabPageRecordImage";
            tabPageRecordImage.Padding = new Padding(3);
            tabPageRecordImage.Size = new Size(613, 516);
            tabPageRecordImage.Padding = new Padding(4, 4, 4, 4);
            tabPageRecordImage.Size = new Size(790, 611);
            tabPageRecordImage.TabIndex = 1;
            tabPageRecordImage.Text = "结果图像";
            tabPageRecordImage.UseVisualStyleBackColor = true;
@@ -576,22 +602,22 @@
            // pnlRecordImage
            // 
            pnlRecordImage.Dock = DockStyle.Fill;
            pnlRecordImage.Location = new Point(3, 3);
            pnlRecordImage.Margin = new Padding(4);
            pnlRecordImage.Location = new Point(4, 4);
            pnlRecordImage.Margin = new Padding(5, 5, 5, 5);
            pnlRecordImage.Name = "pnlRecordImage";
            pnlRecordImage.Size = new Size(607, 510);
            pnlRecordImage.Size = new Size(782, 603);
            pnlRecordImage.TabIndex = 45;
            // 
            // HFindCode2dToolEdit
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleDimensions = new SizeF(9F, 20F);
            AutoScaleMode = AutoScaleMode.Font;
            Controls.Add(MainTableLayoutPanel);
            Controls.Add(BtmStatusStrip);
            Controls.Add(TopToolStrip);
            Margin = new Padding(2, 3, 2, 3);
            Margin = new Padding(3, 4, 3, 4);
            Name = "HFindCode2dToolEdit";
            Size = new Size(1044, 599);
            Size = new Size(1342, 705);
            Load += HFindCode2dToolEdit_Load;
            tablePanelParas.ResumeLayout(false);
            tablePanelParas.PerformLayout();
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.resx
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Microsoft ResX Schema
    Version 2.0
@@ -48,7 +48,7 @@
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
@@ -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>148, 17</value>
    <value>340, 17</value>
  </metadata>
</root>
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs
@@ -47,6 +47,7 @@
            label13 = new Label();
            cmbTransition = new ComboBox();
            cmbSelect = new ComboBox();
            btnShowROI = new Button();
            pnlInputImage = new Panel();
            TopToolStrip = new ToolStrip();
            btnRun = new ToolStripButton();
@@ -85,7 +86,6 @@
            tabPageInputImage = new TabPage();
            tabPageRecordImage = new TabPage();
            pnlRecordImage = new Panel();
            btnShowROI = new Button();
            tablePanelParas.SuspendLayout();
            TopToolStrip.SuspendLayout();
            BtmStatusStrip.SuspendLayout();
@@ -104,9 +104,9 @@
            // tablePanelParas
            // 
            tablePanelParas.ColumnCount = 4;
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 90F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 116F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 90F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 116F));
            tablePanelParas.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
            tablePanelParas.Controls.Add(label1, 0, 0);
            tablePanelParas.Controls.Add(itxtCaliperCount, 1, 0);
@@ -126,8 +126,8 @@
            tablePanelParas.Controls.Add(cmbSelect, 3, 3);
            tablePanelParas.Controls.Add(btnShowROI, 0, 4);
            tablePanelParas.Dock = DockStyle.Fill;
            tablePanelParas.Location = new Point(3, 3);
            tablePanelParas.Margin = new Padding(2, 3, 2, 3);
            tablePanelParas.Location = new Point(4, 4);
            tablePanelParas.Margin = new Padding(3, 4, 3, 4);
            tablePanelParas.Name = "tablePanelParas";
            tablePanelParas.RowCount = 10;
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
@@ -140,155 +140,148 @@
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 10.000001F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 10.000001F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tablePanelParas.Size = new Size(397, 510);
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tablePanelParas.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tablePanelParas.Size = new Size(512, 603);
            tablePanelParas.TabIndex = 0;
            // 
            // label1
            // 
            label1.AutoSize = true;
            label1.Location = new Point(2, 0);
            label1.Margin = new Padding(2, 0, 2, 0);
            label1.MaximumSize = new Size(0, 28);
            label1.MinimumSize = new Size(0, 28);
            label1.Location = new Point(3, 0);
            label1.MaximumSize = new Size(0, 33);
            label1.MinimumSize = new Size(0, 33);
            label1.Name = "label1";
            label1.Size = new Size(56, 28);
            label1.Size = new Size(69, 33);
            label1.TabIndex = 0;
            label1.Text = "卡尺数量";
            label1.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // itxtCaliperCount
            // 
            itxtCaliperCount.Location = new Point(92, 3);
            itxtCaliperCount.Margin = new Padding(2, 3, 2, 3);
            itxtCaliperCount.Location = new Point(119, 4);
            itxtCaliperCount.Margin = new Padding(3, 4, 3, 4);
            itxtCaliperCount.Name = "itxtCaliperCount";
            itxtCaliperCount.Size = new Size(98, 23);
            itxtCaliperCount.Size = new Size(125, 27);
            itxtCaliperCount.TabIndex = 5;
            itxtCaliperCount.Text = "6";
            // 
            // label2
            // 
            label2.AutoSize = true;
            label2.Location = new Point(200, 0);
            label2.Margin = new Padding(2, 0, 2, 0);
            label2.MaximumSize = new Size(0, 28);
            label2.MinimumSize = new Size(0, 28);
            label2.Location = new Point(259, 0);
            label2.MaximumSize = new Size(0, 33);
            label2.MinimumSize = new Size(0, 33);
            label2.Name = "label2";
            label2.Size = new Size(56, 28);
            label2.Size = new Size(69, 33);
            label2.TabIndex = 1;
            label2.Text = "卡尺长度";
            label2.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtCaliperHeight
            // 
            dtxtCaliperHeight.Location = new Point(290, 3);
            dtxtCaliperHeight.Margin = new Padding(2, 3, 2, 3);
            dtxtCaliperHeight.Location = new Point(375, 4);
            dtxtCaliperHeight.Margin = new Padding(3, 4, 3, 4);
            dtxtCaliperHeight.Name = "dtxtCaliperHeight";
            dtxtCaliperHeight.Size = new Size(98, 23);
            dtxtCaliperHeight.Size = new Size(125, 27);
            dtxtCaliperHeight.TabIndex = 6;
            dtxtCaliperHeight.Text = "30";
            // 
            // label3
            // 
            label3.AutoSize = true;
            label3.Location = new Point(2, 51);
            label3.Margin = new Padding(2, 0, 2, 0);
            label3.MaximumSize = new Size(0, 28);
            label3.MinimumSize = new Size(0, 28);
            label3.Location = new Point(3, 60);
            label3.MaximumSize = new Size(0, 33);
            label3.MinimumSize = new Size(0, 33);
            label3.Name = "label3";
            label3.Size = new Size(56, 28);
            label3.Size = new Size(69, 33);
            label3.TabIndex = 2;
            label3.Text = "卡尺宽度";
            label3.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // dtxtCaliperWidth
            // 
            dtxtCaliperWidth.Location = new Point(92, 54);
            dtxtCaliperWidth.Margin = new Padding(2, 3, 2, 3);
            dtxtCaliperWidth.Location = new Point(119, 64);
            dtxtCaliperWidth.Margin = new Padding(3, 4, 3, 4);
            dtxtCaliperWidth.Name = "dtxtCaliperWidth";
            dtxtCaliperWidth.Size = new Size(98, 23);
            dtxtCaliperWidth.Size = new Size(125, 27);
            dtxtCaliperWidth.TabIndex = 7;
            dtxtCaliperWidth.Text = "10";
            // 
            // label4
            // 
            label4.AutoSize = true;
            label4.Location = new Point(200, 51);
            label4.Margin = new Padding(2, 0, 2, 0);
            label4.MaximumSize = new Size(0, 28);
            label4.MinimumSize = new Size(0, 28);
            label4.Location = new Point(259, 60);
            label4.MaximumSize = new Size(0, 33);
            label4.MinimumSize = new Size(0, 33);
            label4.Name = "label4";
            label4.Size = new Size(80, 28);
            label4.Size = new Size(99, 33);
            label4.TabIndex = 3;
            label4.Text = "过滤一半像素";
            label4.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // itxtSigma
            // 
            itxtSigma.Location = new Point(290, 54);
            itxtSigma.Margin = new Padding(2, 3, 2, 3);
            itxtSigma.Location = new Point(375, 64);
            itxtSigma.Margin = new Padding(3, 4, 3, 4);
            itxtSigma.Name = "itxtSigma";
            itxtSigma.Size = new Size(98, 23);
            itxtSigma.Size = new Size(125, 27);
            itxtSigma.TabIndex = 8;
            itxtSigma.Text = "0";
            // 
            // label10
            // 
            label10.AutoSize = true;
            label10.Location = new Point(2, 102);
            label10.Margin = new Padding(2, 0, 2, 0);
            label10.MaximumSize = new Size(0, 28);
            label10.MinimumSize = new Size(0, 28);
            label10.Location = new Point(3, 120);
            label10.MaximumSize = new Size(0, 33);
            label10.MinimumSize = new Size(0, 33);
            label10.Name = "label10";
            label10.Size = new Size(68, 28);
            label10.Size = new Size(84, 33);
            label10.TabIndex = 9;
            label10.Text = "对比度阈值";
            label10.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // itxtThreshold
            // 
            itxtThreshold.Location = new Point(92, 105);
            itxtThreshold.Margin = new Padding(2, 3, 2, 3);
            itxtThreshold.Location = new Point(119, 124);
            itxtThreshold.Margin = new Padding(3, 4, 3, 4);
            itxtThreshold.Name = "itxtThreshold";
            itxtThreshold.Size = new Size(98, 23);
            itxtThreshold.Size = new Size(125, 27);
            itxtThreshold.TabIndex = 9;
            itxtThreshold.Text = "0";
            // 
            // label11
            // 
            label11.AutoSize = true;
            label11.Location = new Point(200, 102);
            label11.Margin = new Padding(2, 0, 2, 0);
            label11.MaximumSize = new Size(0, 28);
            label11.MinimumSize = new Size(0, 28);
            label11.Location = new Point(259, 120);
            label11.MaximumSize = new Size(0, 33);
            label11.MinimumSize = new Size(0, 33);
            label11.Name = "label11";
            label11.Size = new Size(56, 28);
            label11.Size = new Size(69, 33);
            label11.TabIndex = 10;
            label11.Text = "忽略点数";
            label11.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // itxtIgnoreCount
            // 
            itxtIgnoreCount.Location = new Point(290, 105);
            itxtIgnoreCount.Margin = new Padding(2, 3, 2, 3);
            itxtIgnoreCount.Location = new Point(375, 124);
            itxtIgnoreCount.Margin = new Padding(3, 4, 3, 4);
            itxtIgnoreCount.Name = "itxtIgnoreCount";
            itxtIgnoreCount.Size = new Size(98, 23);
            itxtIgnoreCount.Size = new Size(125, 27);
            itxtIgnoreCount.TabIndex = 9;
            itxtIgnoreCount.Text = "0";
            // 
            // label12
            // 
            label12.AutoSize = true;
            label12.Location = new Point(2, 153);
            label12.Margin = new Padding(2, 0, 2, 0);
            label12.MaximumSize = new Size(0, 28);
            label12.MinimumSize = new Size(0, 28);
            label12.Location = new Point(3, 180);
            label12.MaximumSize = new Size(0, 33);
            label12.MinimumSize = new Size(0, 33);
            label12.Name = "label12";
            label12.Size = new Size(32, 28);
            label12.Size = new Size(39, 33);
            label12.TabIndex = 11;
            label12.Text = "极性";
            label12.TextAlign = ContentAlignment.MiddleCenter;
@@ -296,12 +289,11 @@
            // label13
            // 
            label13.AutoSize = true;
            label13.Location = new Point(200, 153);
            label13.Margin = new Padding(2, 0, 2, 0);
            label13.MaximumSize = new Size(0, 28);
            label13.MinimumSize = new Size(0, 28);
            label13.Location = new Point(259, 180);
            label13.MaximumSize = new Size(0, 33);
            label13.MinimumSize = new Size(0, 33);
            label13.Name = "label13";
            label13.Size = new Size(56, 28);
            label13.Size = new Size(69, 33);
            label13.TabIndex = 12;
            label13.Text = "边缘位置";
            label13.TextAlign = ContentAlignment.MiddleCenter;
@@ -309,34 +301,49 @@
            // cmbTransition
            // 
            cmbTransition.FormattingEnabled = true;
            cmbTransition.Location = new Point(93, 156);
            cmbTransition.Location = new Point(120, 184);
            cmbTransition.Margin = new Padding(4);
            cmbTransition.Name = "cmbTransition";
            cmbTransition.Size = new Size(102, 25);
            cmbTransition.Size = new Size(130, 28);
            cmbTransition.TabIndex = 13;
            // 
            // cmbSelect
            // 
            cmbSelect.FormattingEnabled = true;
            cmbSelect.Location = new Point(291, 156);
            cmbSelect.Location = new Point(376, 184);
            cmbSelect.Margin = new Padding(4);
            cmbSelect.Name = "cmbSelect";
            cmbSelect.Size = new Size(103, 25);
            cmbSelect.Size = new Size(131, 28);
            cmbSelect.TabIndex = 14;
            //
            // btnShowROI
            //
            btnShowROI.Dock = DockStyle.Fill;
            btnShowROI.Location = new Point(4, 244);
            btnShowROI.Margin = new Padding(4);
            btnShowROI.Name = "btnShowROI";
            btnShowROI.Size = new Size(108, 52);
            btnShowROI.TabIndex = 15;
            btnShowROI.Text = "显示找线区域";
            btnShowROI.UseVisualStyleBackColor = true;
            btnShowROI.Click += btnShowROI_Click;
            // 
            // pnlInputImage
            // 
            pnlInputImage.Dock = DockStyle.Fill;
            pnlInputImage.Location = new Point(3, 3);
            pnlInputImage.Margin = new Padding(4);
            pnlInputImage.Location = new Point(4, 4);
            pnlInputImage.Margin = new Padding(5);
            pnlInputImage.Name = "pnlInputImage";
            pnlInputImage.Size = new Size(607, 510);
            pnlInputImage.Size = new Size(782, 603);
            pnlInputImage.TabIndex = 44;
            // 
            // TopToolStrip
            // 
            TopToolStrip.ImageScalingSize = new Size(20, 20);
            TopToolStrip.Items.AddRange(new ToolStripItem[] { btnRun, btnLoadImage, btnSaveParas, btnLoadParas });
            TopToolStrip.Location = new Point(0, 0);
            TopToolStrip.Name = "TopToolStrip";
            TopToolStrip.Size = new Size(1044, 25);
            TopToolStrip.Size = new Size(1342, 27);
            TopToolStrip.TabIndex = 45;
            TopToolStrip.Text = "toolStrip1";
            // 
@@ -345,7 +352,7 @@
            btnRun.BackgroundImageLayout = ImageLayout.Zoom;
            btnRun.ImageTransparentColor = Color.Magenta;
            btnRun.Name = "btnRun";
            btnRun.Size = new Size(36, 22);
            btnRun.Size = new Size(43, 24);
            btnRun.Text = "运行";
            btnRun.Click += btnRun_Click;
            // 
@@ -353,7 +360,7 @@
            // 
            btnLoadImage.ImageTransparentColor = Color.Magenta;
            btnLoadImage.Name = "btnLoadImage";
            btnLoadImage.Size = new Size(36, 22);
            btnLoadImage.Size = new Size(43, 24);
            btnLoadImage.Text = "导图";
            btnLoadImage.Click += btnLoadImage_Click;
            // 
@@ -361,7 +368,7 @@
            // 
            btnSaveParas.ImageTransparentColor = Color.Magenta;
            btnSaveParas.Name = "btnSaveParas";
            btnSaveParas.Size = new Size(36, 22);
            btnSaveParas.Size = new Size(43, 24);
            btnSaveParas.Text = "保存";
            btnSaveParas.Click += btnSaveParas_Click;
            // 
@@ -369,35 +376,37 @@
            // 
            btnLoadParas.ImageTransparentColor = Color.Magenta;
            btnLoadParas.Name = "btnLoadParas";
            btnLoadParas.Size = new Size(36, 22);
            btnLoadParas.Size = new Size(43, 24);
            btnLoadParas.Text = "加载";
            btnLoadParas.Click += btnLoadParas_Click;
            // 
            // BtmStatusStrip
            // 
            BtmStatusStrip.ImageScalingSize = new Size(20, 20);
            BtmStatusStrip.Items.AddRange(new ToolStripItem[] { lblResult, lblMsg, lblRunTime });
            BtmStatusStrip.Location = new Point(0, 577);
            BtmStatusStrip.Location = new Point(0, 679);
            BtmStatusStrip.Name = "BtmStatusStrip";
            BtmStatusStrip.Size = new Size(1044, 22);
            BtmStatusStrip.Padding = new Padding(1, 0, 18, 0);
            BtmStatusStrip.Size = new Size(1342, 26);
            BtmStatusStrip.TabIndex = 46;
            BtmStatusStrip.Text = "statusStrip1";
            // 
            // lblResult
            // 
            lblResult.Name = "lblResult";
            lblResult.Size = new Size(34, 17);
            lblResult.Size = new Size(42, 20);
            lblResult.Text = "True";
            // 
            // lblMsg
            // 
            lblMsg.Name = "lblMsg";
            lblMsg.Size = new Size(56, 17);
            lblMsg.Size = new Size(69, 20);
            lblMsg.Text = "运行成功";
            // 
            // lblRunTime
            // 
            lblRunTime.Name = "lblRunTime";
            lblRunTime.Size = new Size(32, 17);
            lblRunTime.Size = new Size(39, 20);
            lblRunTime.Text = "0ms";
            // 
            // MainTableLayoutPanel
@@ -408,11 +417,12 @@
            MainTableLayoutPanel.Controls.Add(parasTabControl, 0, 0);
            MainTableLayoutPanel.Controls.Add(imgTabControl, 1, 0);
            MainTableLayoutPanel.Dock = DockStyle.Fill;
            MainTableLayoutPanel.Location = new Point(0, 25);
            MainTableLayoutPanel.Location = new Point(0, 27);
            MainTableLayoutPanel.Margin = new Padding(4);
            MainTableLayoutPanel.Name = "MainTableLayoutPanel";
            MainTableLayoutPanel.RowCount = 1;
            MainTableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            MainTableLayoutPanel.Size = new Size(1044, 552);
            MainTableLayoutPanel.Size = new Size(1342, 652);
            MainTableLayoutPanel.TabIndex = 47;
            // 
            // parasTabControl
@@ -421,19 +431,21 @@
            parasTabControl.Controls.Add(tabPage5);
            parasTabControl.Controls.Add(tabPage2);
            parasTabControl.Dock = DockStyle.Fill;
            parasTabControl.Location = new Point(3, 3);
            parasTabControl.Location = new Point(4, 4);
            parasTabControl.Margin = new Padding(4);
            parasTabControl.Name = "parasTabControl";
            parasTabControl.SelectedIndex = 0;
            parasTabControl.Size = new Size(411, 546);
            parasTabControl.Size = new Size(528, 644);
            parasTabControl.TabIndex = 48;
            // 
            // tabPage1
            // 
            tabPage1.Controls.Add(tablePanelParas);
            tabPage1.Location = new Point(4, 26);
            tabPage1.Location = new Point(4, 29);
            tabPage1.Margin = new Padding(4);
            tabPage1.Name = "tabPage1";
            tabPage1.Padding = new Padding(3);
            tabPage1.Size = new Size(403, 516);
            tabPage1.Padding = new Padding(4);
            tabPage1.Size = new Size(520, 611);
            tabPage1.TabIndex = 0;
            tabPage1.Text = "输入参数";
            tabPage1.UseVisualStyleBackColor = true;
@@ -441,9 +453,10 @@
            // tabPage5
            // 
            tabPage5.Controls.Add(tableLayoutPanel2);
            tabPage5.Location = new Point(4, 26);
            tabPage5.Location = new Point(4, 29);
            tabPage5.Margin = new Padding(4);
            tabPage5.Name = "tabPage5";
            tabPage5.Size = new Size(403, 516);
            tabPage5.Size = new Size(520, 611);
            tabPage5.TabIndex = 2;
            tabPage5.Text = "运行参数";
            tabPage5.UseVisualStyleBackColor = true;
@@ -451,36 +464,38 @@
            // tableLayoutPanel2
            // 
            tableLayoutPanel2.ColumnCount = 4;
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 60F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 150F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 77F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 193F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 26F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel2.Controls.Add(cmbTypeRoi, 1, 0);
            tableLayoutPanel2.Controls.Add(label21, 0, 0);
            tableLayoutPanel2.Controls.Add(label22, 0, 1);
            tableLayoutPanel2.Controls.Add(cmbFixture, 1, 1);
            tableLayoutPanel2.Controls.Add(ckbDrawRoi, 2, 0);
            tableLayoutPanel2.Location = new Point(3, 3);
            tableLayoutPanel2.Location = new Point(4, 4);
            tableLayoutPanel2.Margin = new Padding(4);
            tableLayoutPanel2.Name = "tableLayoutPanel2";
            tableLayoutPanel2.RowCount = 8;
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel2.Size = new Size(323, 309);
            tableLayoutPanel2.Size = new Size(415, 364);
            tableLayoutPanel2.TabIndex = 4;
            // 
            // cmbTypeRoi
            // 
            cmbTypeRoi.Enabled = false;
            cmbTypeRoi.FormattingEnabled = true;
            cmbTypeRoi.Location = new Point(63, 3);
            cmbTypeRoi.Location = new Point(81, 4);
            cmbTypeRoi.Margin = new Padding(4);
            cmbTypeRoi.Name = "cmbTypeRoi";
            cmbTypeRoi.Size = new Size(121, 25);
            cmbTypeRoi.Size = new Size(154, 28);
            cmbTypeRoi.TabIndex = 1;
            cmbTypeRoi.SelectedIndexChanged += cmbTypeRoi_SelectedIndexChanged;
            // 
@@ -488,9 +503,10 @@
            // 
            label21.AutoSize = true;
            label21.Dock = DockStyle.Fill;
            label21.Location = new Point(3, 0);
            label21.Location = new Point(4, 0);
            label21.Margin = new Padding(4, 0, 4, 0);
            label21.Name = "label21";
            label21.Size = new Size(54, 30);
            label21.Size = new Size(69, 35);
            label21.TabIndex = 3;
            label21.Text = "ROI";
            label21.TextAlign = ContentAlignment.MiddleCenter;
@@ -499,9 +515,10 @@
            // 
            label22.AutoSize = true;
            label22.Dock = DockStyle.Fill;
            label22.Location = new Point(3, 30);
            label22.Location = new Point(4, 35);
            label22.Margin = new Padding(4, 0, 4, 0);
            label22.Name = "label22";
            label22.Size = new Size(54, 30);
            label22.Size = new Size(69, 35);
            label22.TabIndex = 4;
            label22.Text = "Fixture";
            label22.TextAlign = ContentAlignment.MiddleCenter;
@@ -509,9 +526,10 @@
            // cmbFixture
            // 
            cmbFixture.FormattingEnabled = true;
            cmbFixture.Location = new Point(63, 33);
            cmbFixture.Location = new Point(81, 39);
            cmbFixture.Margin = new Padding(4);
            cmbFixture.Name = "cmbFixture";
            cmbFixture.Size = new Size(121, 25);
            cmbFixture.Size = new Size(154, 28);
            cmbFixture.TabIndex = 5;
            cmbFixture.SelectedIndexChanged += cmbFixture_SelectedIndexChanged;
            // 
@@ -519,9 +537,10 @@
            // 
            ckbDrawRoi.AutoSize = true;
            ckbDrawRoi.CheckAlign = ContentAlignment.MiddleCenter;
            ckbDrawRoi.Location = new Point(213, 3);
            ckbDrawRoi.Location = new Point(274, 4);
            ckbDrawRoi.Margin = new Padding(4);
            ckbDrawRoi.Name = "ckbDrawRoi";
            ckbDrawRoi.Size = new Size(14, 14);
            ckbDrawRoi.Size = new Size(18, 17);
            ckbDrawRoi.TabIndex = 2;
            ckbDrawRoi.UseVisualStyleBackColor = true;
            ckbDrawRoi.CheckedChanged += ckbDrawRoi_CheckedChanged;
@@ -529,10 +548,11 @@
            // tabPage2
            // 
            tabPage2.Controls.Add(tableLayoutResults);
            tabPage2.Location = new Point(4, 26);
            tabPage2.Location = new Point(4, 29);
            tabPage2.Margin = new Padding(4);
            tabPage2.Name = "tabPage2";
            tabPage2.Padding = new Padding(3);
            tabPage2.Size = new Size(403, 516);
            tabPage2.Padding = new Padding(4);
            tabPage2.Size = new Size(520, 611);
            tabPage2.TabIndex = 1;
            tabPage2.Text = "输出结果";
            tabPage2.UseVisualStyleBackColor = true;
@@ -540,7 +560,7 @@
            // tableLayoutResults
            // 
            tableLayoutResults.ColumnCount = 2;
            tableLayoutResults.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 100F));
            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);
@@ -555,8 +575,8 @@
            tableLayoutResults.Controls.Add(label18, 0, 5);
            tableLayoutResults.Controls.Add(dtxtCount, 1, 5);
            tableLayoutResults.Dock = DockStyle.Fill;
            tableLayoutResults.Location = new Point(3, 3);
            tableLayoutResults.Margin = new Padding(2, 3, 2, 3);
            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));
@@ -569,29 +589,28 @@
            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(397, 510);
            tableLayoutResults.Size = new Size(512, 603);
            tableLayoutResults.TabIndex = 1;
            // 
            // dtxtHeight
            // 
            dtxtHeight.Dock = DockStyle.Fill;
            dtxtHeight.Location = new Point(102, 207);
            dtxtHeight.Margin = new Padding(2, 3, 2, 3);
            dtxtHeight.Location = new Point(132, 244);
            dtxtHeight.Margin = new Padding(3, 4, 3, 4);
            dtxtHeight.Name = "dtxtHeight";
            dtxtHeight.ReadOnly = true;
            dtxtHeight.Size = new Size(293, 23);
            dtxtHeight.Size = new Size(377, 27);
            dtxtHeight.TabIndex = 9;
            // 
            // label9
            // 
            label9.AutoSize = true;
            label9.Dock = DockStyle.Fill;
            label9.Location = new Point(2, 204);
            label9.Margin = new Padding(2, 0, 2, 0);
            label9.MaximumSize = new Size(0, 28);
            label9.MinimumSize = new Size(0, 28);
            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(96, 28);
            label9.Size = new Size(123, 33);
            label9.TabIndex = 3;
            label9.Text = "高度";
            label9.TextAlign = ContentAlignment.TopCenter;
@@ -600,12 +619,11 @@
            // 
            label5.AutoSize = true;
            label5.Dock = DockStyle.Fill;
            label5.Location = new Point(2, 0);
            label5.Margin = new Padding(2, 0, 2, 0);
            label5.MaximumSize = new Size(0, 28);
            label5.MinimumSize = new Size(0, 28);
            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(96, 28);
            label5.Size = new Size(123, 33);
            label5.TabIndex = 0;
            label5.Text = "X";
            label5.TextAlign = ContentAlignment.TopCenter;
@@ -614,12 +632,11 @@
            // 
            label6.AutoSize = true;
            label6.Dock = DockStyle.Fill;
            label6.Location = new Point(2, 51);
            label6.Margin = new Padding(2, 0, 2, 0);
            label6.MaximumSize = new Size(0, 28);
            label6.MinimumSize = new Size(0, 28);
            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(96, 28);
            label6.Size = new Size(123, 33);
            label6.TabIndex = 1;
            label6.Text = "Y";
            label6.TextAlign = ContentAlignment.TopCenter;
@@ -628,12 +645,11 @@
            // 
            label7.AutoSize = true;
            label7.Dock = DockStyle.Fill;
            label7.Location = new Point(2, 102);
            label7.Margin = new Padding(2, 0, 2, 0);
            label7.MaximumSize = new Size(0, 28);
            label7.MinimumSize = new Size(0, 28);
            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(96, 28);
            label7.Size = new Size(123, 33);
            label7.TabIndex = 2;
            label7.Text = "角度(°)";
            label7.TextAlign = ContentAlignment.TopCenter;
@@ -642,12 +658,11 @@
            // 
            label8.AutoSize = true;
            label8.Dock = DockStyle.Fill;
            label8.Location = new Point(2, 153);
            label8.Margin = new Padding(2, 0, 2, 0);
            label8.MaximumSize = new Size(0, 28);
            label8.MinimumSize = new Size(0, 28);
            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(96, 28);
            label8.Size = new Size(123, 33);
            label8.TabIndex = 3;
            label8.Text = "宽度";
            label8.TextAlign = ContentAlignment.TopCenter;
@@ -655,50 +670,51 @@
            // dtxtCenterX
            // 
            dtxtCenterX.Dock = DockStyle.Fill;
            dtxtCenterX.Location = new Point(102, 3);
            dtxtCenterX.Margin = new Padding(2, 3, 2, 3);
            dtxtCenterX.Location = new Point(132, 4);
            dtxtCenterX.Margin = new Padding(3, 4, 3, 4);
            dtxtCenterX.Name = "dtxtCenterX";
            dtxtCenterX.ReadOnly = true;
            dtxtCenterX.Size = new Size(293, 23);
            dtxtCenterX.Size = new Size(377, 27);
            dtxtCenterX.TabIndex = 5;
            // 
            // dtxtCenterY
            // 
            dtxtCenterY.Dock = DockStyle.Fill;
            dtxtCenterY.Location = new Point(102, 54);
            dtxtCenterY.Margin = new Padding(2, 3, 2, 3);
            dtxtCenterY.Location = new Point(132, 64);
            dtxtCenterY.Margin = new Padding(3, 4, 3, 4);
            dtxtCenterY.Name = "dtxtCenterY";
            dtxtCenterY.ReadOnly = true;
            dtxtCenterY.Size = new Size(293, 23);
            dtxtCenterY.Size = new Size(377, 27);
            dtxtCenterY.TabIndex = 6;
            // 
            // dtxtAngle
            // 
            dtxtAngle.Dock = DockStyle.Fill;
            dtxtAngle.Location = new Point(102, 105);
            dtxtAngle.Margin = new Padding(2, 3, 2, 3);
            dtxtAngle.Location = new Point(132, 124);
            dtxtAngle.Margin = new Padding(3, 4, 3, 4);
            dtxtAngle.Name = "dtxtAngle";
            dtxtAngle.ReadOnly = true;
            dtxtAngle.Size = new Size(293, 23);
            dtxtAngle.Size = new Size(377, 27);
            dtxtAngle.TabIndex = 7;
            // 
            // dtxtWidth
            // 
            dtxtWidth.Dock = DockStyle.Fill;
            dtxtWidth.Location = new Point(102, 156);
            dtxtWidth.Margin = new Padding(2, 3, 2, 3);
            dtxtWidth.Location = new Point(132, 184);
            dtxtWidth.Margin = new Padding(3, 4, 3, 4);
            dtxtWidth.Name = "dtxtWidth";
            dtxtWidth.ReadOnly = true;
            dtxtWidth.Size = new Size(293, 23);
            dtxtWidth.Size = new Size(377, 27);
            dtxtWidth.TabIndex = 8;
            // 
            // label18
            // 
            label18.AutoSize = true;
            label18.Dock = DockStyle.Fill;
            label18.Location = new Point(3, 255);
            label18.Location = new Point(4, 300);
            label18.Margin = new Padding(4, 0, 4, 0);
            label18.Name = "label18";
            label18.Size = new Size(94, 51);
            label18.Size = new Size(121, 60);
            label18.TabIndex = 10;
            label18.Text = "数量";
            label18.TextAlign = ContentAlignment.TopCenter;
@@ -706,10 +722,11 @@
            // dtxtCount
            // 
            dtxtCount.Dock = DockStyle.Fill;
            dtxtCount.Location = new Point(103, 258);
            dtxtCount.Location = new Point(133, 304);
            dtxtCount.Margin = new Padding(4);
            dtxtCount.Name = "dtxtCount";
            dtxtCount.ReadOnly = true;
            dtxtCount.Size = new Size(291, 23);
            dtxtCount.Size = new Size(375, 27);
            dtxtCount.TabIndex = 11;
            // 
            // imgTabControl
@@ -717,19 +734,21 @@
            imgTabControl.Controls.Add(tabPageInputImage);
            imgTabControl.Controls.Add(tabPageRecordImage);
            imgTabControl.Dock = DockStyle.Fill;
            imgTabControl.Location = new Point(420, 3);
            imgTabControl.Location = new Point(540, 4);
            imgTabControl.Margin = new Padding(4);
            imgTabControl.Name = "imgTabControl";
            imgTabControl.SelectedIndex = 0;
            imgTabControl.Size = new Size(621, 546);
            imgTabControl.Size = new Size(798, 644);
            imgTabControl.TabIndex = 49;
            // 
            // tabPageInputImage
            // 
            tabPageInputImage.Controls.Add(pnlInputImage);
            tabPageInputImage.Location = new Point(4, 26);
            tabPageInputImage.Location = new Point(4, 29);
            tabPageInputImage.Margin = new Padding(4);
            tabPageInputImage.Name = "tabPageInputImage";
            tabPageInputImage.Padding = new Padding(3);
            tabPageInputImage.Size = new Size(613, 516);
            tabPageInputImage.Padding = new Padding(4);
            tabPageInputImage.Size = new Size(790, 611);
            tabPageInputImage.TabIndex = 0;
            tabPageInputImage.Text = "输入图像";
            tabPageInputImage.UseVisualStyleBackColor = true;
@@ -737,10 +756,11 @@
            // tabPageRecordImage
            // 
            tabPageRecordImage.Controls.Add(pnlRecordImage);
            tabPageRecordImage.Location = new Point(4, 26);
            tabPageRecordImage.Location = new Point(4, 29);
            tabPageRecordImage.Margin = new Padding(4);
            tabPageRecordImage.Name = "tabPageRecordImage";
            tabPageRecordImage.Padding = new Padding(3);
            tabPageRecordImage.Size = new Size(613, 516);
            tabPageRecordImage.Padding = new Padding(4);
            tabPageRecordImage.Size = new Size(790, 611);
            tabPageRecordImage.TabIndex = 1;
            tabPageRecordImage.Text = "结果图像";
            tabPageRecordImage.UseVisualStyleBackColor = true;
@@ -748,33 +768,22 @@
            // pnlRecordImage
            // 
            pnlRecordImage.Dock = DockStyle.Fill;
            pnlRecordImage.Location = new Point(3, 3);
            pnlRecordImage.Margin = new Padding(4);
            pnlRecordImage.Location = new Point(4, 4);
            pnlRecordImage.Margin = new Padding(5);
            pnlRecordImage.Name = "pnlRecordImage";
            pnlRecordImage.Size = new Size(607, 510);
            pnlRecordImage.Size = new Size(782, 603);
            pnlRecordImage.TabIndex = 45;
            //
            // btnShowROI
            //
            btnShowROI.Dock = DockStyle.Fill;
            btnShowROI.Location = new Point(3, 207);
            btnShowROI.Name = "btnShowROI";
            btnShowROI.Size = new Size(84, 45);
            btnShowROI.TabIndex = 15;
            btnShowROI.Text = "显示找线区域";
            btnShowROI.UseVisualStyleBackColor = true;
            btnShowROI.Click += btnShowROI_Click;
            // 
            // HFindLineToolEdit
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleDimensions = new SizeF(9F, 20F);
            AutoScaleMode = AutoScaleMode.Font;
            Controls.Add(MainTableLayoutPanel);
            Controls.Add(BtmStatusStrip);
            Controls.Add(TopToolStrip);
            Margin = new Padding(2, 3, 2, 3);
            Margin = new Padding(3, 4, 3, 4);
            Name = "HFindLineToolEdit";
            Size = new Size(1044, 599);
            Size = new Size(1342, 705);
            Load += HFindLineToolEdit_Load;
            tablePanelParas.ResumeLayout(false);
            tablePanelParas.PerformLayout();
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.resx
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Microsoft ResX Schema
    Version 2.0
@@ -48,7 +48,7 @@
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
@@ -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>129, 17</value>
    <value>340, 17</value>
  </metadata>
</root>
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,180 @@
using HalconDotNet;
using LB_VisionControl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace LB_VisionProcesses.Alogrithms.Halcon
{
    public enum ImageEnhancementType { Emphasize, EquHisto, ScaleMax }
    [Process("Halcon图像增强", Category = "Halcon2D工具", Description = "创建图像增强工具")]
    public class HImageEnhancementTool : TAlgorithm
    {
        public HImageEnhancementTool()
        {
            strProcessClass = "LB_VisionProcesses.Alogrithms.Halcon.HImageEnhancementTool";
            strProcessName = "Halcon图像增强工具";
            Params.Inputs.Add("滤波器类型", "边缘增强");
            Params.Inputs.Add("掩膜宽", 1);
            Params.Inputs.Add("掩膜高", 1);
            Params.Inputs.Add("增强因子", 1.0);
            //emphasize(Image : ImageEmphasize : MaskWidth, MaskHeight, Factor : )
            Params.Inputs.Add("滤波器类型", "直方图均衡化");
            //equ_histo_image(Image : ImageEquHisto : : )
            Params.Inputs.Add("滤波器类型", "比例增强");
            //scale_image_max(Image : ImageScaleMax : : )
            Params.ROI = new HSegment(0, 0, 250, 250);
        }
        /// <summary>
        /// ç®—子逻辑
        /// </summary>
        public override void TAlgorithmMain()
        {
            #region åˆå§‹åŒ–变量
            HObject ho_Regions, ho_LineXld;
            HOperatorSet.GenEmptyObj(out ho_Regions);
            HOperatorSet.GenEmptyObj(out ho_LineXld);
            #endregion
            try
            {
                if (InputImage == null)
                {
                    Msg = "输入图片为空";
                    Result = false;
                    return;
                }
                #region è£å‰ªåŒºåŸŸ
                if (!(Params.ROI is HSegment))
                {
                    Msg = "ROI类型错误,必须为HSegment类型";
                    Result = false;
                    return;
                }
                if (!(InputImage is HObject))
                {
                    Msg = "输入图片类型错误,必须为HObject类型";
                    Result = false;
                    return;
                }
                HObject DomainImage = ((HObject)InputImage)?.CopyObj(1, -1);
                #endregion
                #region ç®—子逻辑
                Record = new ObjectRecord();
                HObject hoDomainImage = DomainImage as HObject;
                HTuple hv_Channels = new HTuple();
                //判断是否为灰度图
                using (HDevDisposeHelper dh = new HDevDisposeHelper())
                {
                    try
                    {
                        HOperatorSet.CountChannels(hoDomainImage, out hv_Channels);
                        if (hv_Channels.TupleInt() != 1)
                            HOperatorSet.Rgb1ToGray(hoDomainImage, out hoDomainImage);
                        //转换后再次检查是否为灰度图
                        HOperatorSet.CountChannels(hoDomainImage, out hv_Channels);
                        if (hv_Channels.TupleInt() != 1)
                        {
                            HOperatorSet.Rgb1ToGray(hoDomainImage, out hoDomainImage);
                            Msg = "输入图片不为灰度图";
                            Result = false;
                            return;
                        }
                    }
                    catch
                    {
                        Msg = "输入图片不为灰度图且转换失败";
                        Result = false;
                        return;
                    }
                }
                int hv_MaskWidth = Convert.ToInt16(Params.Inputs["掩膜宽"]);
                int hv_MaskHight = Convert.ToInt16(Params.Inputs["掩膜高"]);
                double hv_Factor = Convert.ToDouble(Params.Inputs["增强因子"]);
                Enum.TryParse(Params.Inputs["图像增强类型"]?.ToString(), out ImageEnhancementType imageEnhancementType);
                string hv_ImageEnhancementType = "scaleMax";
                switch (imageEnhancementType)
                {
                    case ImageEnhancementType.Emphasize:
                        hv_ImageEnhancementType = "emphasize";
                        break;
                    case ImageEnhancementType.EquHisto:
                        hv_ImageEnhancementType = "equHisto";
                        break;
                    case ImageEnhancementType.ScaleMax:
                    default:
                        hv_ImageEnhancementType = "scaleMax";
                        break;
                }
                double hv_Row1 = Convert.ToDouble(((HSegment)Params.ROI).BeginRow + Params.Fixture.Row);
                double hv_Column1 = Convert.ToDouble(((HSegment)Params.ROI).BeginColumn + Params.Fixture.Column);
                double hv_Row2 = Convert.ToDouble(((HSegment)Params.ROI).EndRow + Params.Fixture.Row);
                double hv_Column2 = Convert.ToDouble(((HSegment)Params.ROI).EndColumn + Params.Fixture.Column);
                ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_Column1, hv_Row2, hv_Column2);
                #endregion
                #region ç”ŸæˆOutputImage给后续处理
                try
                {
                    OutputImage = hoDomainImage;
                }
                catch (Exception ex)
                {
                    Msg = "生成OutputImage失败,原因是:" + ex.ToString();
                    Result = false;
                    return;
                }
                #endregion
                if (Msg == "运行超时")
                {
                    Result = false;
                    return;
                }
                Msg = "运行成功";
                Result = true;
                return;
            }
            catch (Exception ex)
            {
                Msg = "运行失败,原因是:" + ex.ToString().TrimEnd();
                OutputImage = null;
                Result = false;
                return;
            }
            finally
            {
                if (!Result)
                {
                    Params.Outputs.Add("Segment", new HSegment());
                }
                bCompleted = true;
                #region å†…存释放
                ho_Regions.Dispose();
                #endregion
            }
        }
    }
}
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.Designer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,571 @@
using LB_VisionProcesses.Alogrithms;
namespace LB_VisionProcesses.Alogrithms.Halcon
{
    partial class HImageEnhancementToolEdit
    {
        /// <summary>
        /// å¿…需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// æ¸…理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region ç»„件设计器生成的代码
        /// <summary>
        /// è®¾è®¡å™¨æ”¯æŒæ‰€éœ€çš„æ–¹æ³• - ä¸è¦ä¿®æ”¹
        /// ä½¿ç”¨ä»£ç ç¼–辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            pnlInputImage = new Panel();
            TopToolStrip = new ToolStrip();
            btnRun = new ToolStripButton();
            btnLoadImage = new ToolStripButton();
            btnSaveParas = new ToolStripButton();
            btnLoadParas = new ToolStripButton();
            BtmStatusStrip = new StatusStrip();
            lblResult = new ToolStripStatusLabel();
            lblMsg = new ToolStripStatusLabel();
            lblRunTime = new ToolStripStatusLabel();
            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();
            label21 = new Label();
            label22 = new Label();
            cmbFixture = new ComboBox();
            ckbDrawRoi = new CheckBox();
            imgTabControl = new TabControl();
            tabPageInputImage = new TabPage();
            tabPageRecordImage = new TabPage();
            pnlRecordImage = new Panel();
            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();
            imgTabControl.SuspendLayout();
            tabPageInputImage.SuspendLayout();
            tabPageRecordImage.SuspendLayout();
            SuspendLayout();
            //
            // pnlInputImage
            //
            pnlInputImage.Dock = DockStyle.Fill;
            pnlInputImage.Location = new Point(4, 4);
            pnlInputImage.Margin = new Padding(5);
            pnlInputImage.Name = "pnlInputImage";
            pnlInputImage.Size = new Size(782, 603);
            pnlInputImage.TabIndex = 44;
            //
            // TopToolStrip
            //
            TopToolStrip.ImageScalingSize = new Size(20, 20);
            TopToolStrip.Items.AddRange(new ToolStripItem[] { btnRun, btnLoadImage, btnSaveParas, btnLoadParas });
            TopToolStrip.Location = new Point(0, 0);
            TopToolStrip.Name = "TopToolStrip";
            TopToolStrip.Size = new Size(1342, 27);
            TopToolStrip.TabIndex = 45;
            TopToolStrip.Text = "toolStrip1";
            //
            // btnRun
            //
            btnRun.BackgroundImageLayout = ImageLayout.Zoom;
            btnRun.ImageTransparentColor = Color.Magenta;
            btnRun.Name = "btnRun";
            btnRun.Size = new Size(43, 24);
            btnRun.Text = "运行";
            //
            // btnLoadImage
            //
            btnLoadImage.ImageTransparentColor = Color.Magenta;
            btnLoadImage.Name = "btnLoadImage";
            btnLoadImage.Size = new Size(43, 24);
            btnLoadImage.Text = "导图";
            //
            // btnSaveParas
            //
            btnSaveParas.ImageTransparentColor = Color.Magenta;
            btnSaveParas.Name = "btnSaveParas";
            btnSaveParas.Size = new Size(43, 24);
            btnSaveParas.Text = "保存";
            //
            // btnLoadParas
            //
            btnLoadParas.ImageTransparentColor = Color.Magenta;
            btnLoadParas.Name = "btnLoadParas";
            btnLoadParas.Size = new Size(43, 24);
            btnLoadParas.Text = "加载";
            //
            // BtmStatusStrip
            //
            BtmStatusStrip.ImageScalingSize = new Size(20, 20);
            BtmStatusStrip.Items.AddRange(new ToolStripItem[] { lblResult, lblMsg, lblRunTime });
            BtmStatusStrip.Location = new Point(0, 679);
            BtmStatusStrip.Name = "BtmStatusStrip";
            BtmStatusStrip.Padding = new Padding(1, 0, 18, 0);
            BtmStatusStrip.Size = new Size(1342, 26);
            BtmStatusStrip.TabIndex = 46;
            BtmStatusStrip.Text = "statusStrip1";
            //
            // lblResult
            //
            lblResult.Name = "lblResult";
            lblResult.Size = new Size(42, 20);
            lblResult.Text = "True";
            //
            // lblMsg
            //
            lblMsg.Name = "lblMsg";
            lblMsg.Size = new Size(69, 20);
            lblMsg.Text = "运行成功";
            //
            // lblRunTime
            //
            lblRunTime.Name = "lblRunTime";
            lblRunTime.Size = new Size(39, 20);
            lblRunTime.Text = "0ms";
            //
            // MainTableLayoutPanel
            //
            MainTableLayoutPanel.ColumnCount = 2;
            MainTableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F));
            MainTableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 60F));
            MainTableLayoutPanel.Controls.Add(parasTabControl, 0, 0);
            MainTableLayoutPanel.Controls.Add(imgTabControl, 1, 0);
            MainTableLayoutPanel.Dock = DockStyle.Fill;
            MainTableLayoutPanel.Location = new Point(0, 27);
            MainTableLayoutPanel.Margin = new Padding(4);
            MainTableLayoutPanel.Name = "MainTableLayoutPanel";
            MainTableLayoutPanel.RowCount = 1;
            MainTableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            MainTableLayoutPanel.Size = new Size(1342, 652);
            MainTableLayoutPanel.TabIndex = 47;
            //
            // parasTabControl
            //
            parasTabControl.Controls.Add(tabPage1);
            parasTabControl.Controls.Add(tabPage5);
            parasTabControl.Dock = DockStyle.Fill;
            parasTabControl.Location = new Point(4, 4);
            parasTabControl.Margin = new Padding(4);
            parasTabControl.Name = "parasTabControl";
            parasTabControl.SelectedIndex = 0;
            parasTabControl.Size = new Size(528, 644);
            parasTabControl.TabIndex = 48;
            //
            // tabPage1
            //
            tabPage1.Controls.Add(tableLayoutPanel1);
            tabPage1.Location = new Point(4, 29);
            tabPage1.Margin = new Padding(4);
            tabPage1.Name = "tabPage1";
            tabPage1.Padding = new Padding(4);
            tabPage1.Size = new Size(520, 611);
            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
            //
            tabPage5.Controls.Add(tableLayoutPanel2);
            tabPage5.Location = new Point(4, 29);
            tabPage5.Margin = new Padding(4);
            tabPage5.Name = "tabPage5";
            tabPage5.Size = new Size(520, 611);
            tabPage5.TabIndex = 2;
            tabPage5.Text = "运行参数";
            tabPage5.UseVisualStyleBackColor = true;
            //
            // tableLayoutPanel2
            //
            tableLayoutPanel2.ColumnCount = 4;
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 77F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 193F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 26F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel2.Controls.Add(cmbTypeRoi, 1, 0);
            tableLayoutPanel2.Controls.Add(label21, 0, 0);
            tableLayoutPanel2.Controls.Add(label22, 0, 1);
            tableLayoutPanel2.Controls.Add(cmbFixture, 1, 1);
            tableLayoutPanel2.Controls.Add(ckbDrawRoi, 2, 0);
            tableLayoutPanel2.Location = new Point(4, 4);
            tableLayoutPanel2.Margin = new Padding(4);
            tableLayoutPanel2.Name = "tableLayoutPanel2";
            tableLayoutPanel2.RowCount = 8;
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel2.Size = new Size(415, 364);
            tableLayoutPanel2.TabIndex = 4;
            //
            // cmbTypeRoi
            //
            cmbTypeRoi.Enabled = false;
            cmbTypeRoi.FormattingEnabled = true;
            cmbTypeRoi.Location = new Point(81, 4);
            cmbTypeRoi.Margin = new Padding(4);
            cmbTypeRoi.Name = "cmbTypeRoi";
            cmbTypeRoi.Size = new Size(154, 28);
            cmbTypeRoi.TabIndex = 1;
            //
            // label21
            //
            label21.AutoSize = true;
            label21.Dock = DockStyle.Fill;
            label21.Location = new Point(4, 0);
            label21.Margin = new Padding(4, 0, 4, 0);
            label21.Name = "label21";
            label21.Size = new Size(69, 35);
            label21.TabIndex = 3;
            label21.Text = "ROI";
            label21.TextAlign = ContentAlignment.MiddleCenter;
            //
            // label22
            //
            label22.AutoSize = true;
            label22.Dock = DockStyle.Fill;
            label22.Location = new Point(4, 35);
            label22.Margin = new Padding(4, 0, 4, 0);
            label22.Name = "label22";
            label22.Size = new Size(69, 35);
            label22.TabIndex = 4;
            label22.Text = "Fixture";
            label22.TextAlign = ContentAlignment.MiddleCenter;
            //
            // cmbFixture
            //
            cmbFixture.FormattingEnabled = true;
            cmbFixture.Location = new Point(81, 39);
            cmbFixture.Margin = new Padding(4);
            cmbFixture.Name = "cmbFixture";
            cmbFixture.Size = new Size(154, 28);
            cmbFixture.TabIndex = 5;
            //
            // ckbDrawRoi
            //
            ckbDrawRoi.AutoSize = true;
            ckbDrawRoi.CheckAlign = ContentAlignment.MiddleCenter;
            ckbDrawRoi.Location = new Point(274, 4);
            ckbDrawRoi.Margin = new Padding(4);
            ckbDrawRoi.Name = "ckbDrawRoi";
            ckbDrawRoi.Size = new Size(18, 17);
            ckbDrawRoi.TabIndex = 2;
            ckbDrawRoi.UseVisualStyleBackColor = true;
            //
            // imgTabControl
            //
            imgTabControl.Controls.Add(tabPageInputImage);
            imgTabControl.Controls.Add(tabPageRecordImage);
            imgTabControl.Dock = DockStyle.Fill;
            imgTabControl.Location = new Point(540, 4);
            imgTabControl.Margin = new Padding(4);
            imgTabControl.Name = "imgTabControl";
            imgTabControl.SelectedIndex = 0;
            imgTabControl.Size = new Size(798, 644);
            imgTabControl.TabIndex = 49;
            //
            // tabPageInputImage
            //
            tabPageInputImage.Controls.Add(pnlInputImage);
            tabPageInputImage.Location = new Point(4, 29);
            tabPageInputImage.Margin = new Padding(4);
            tabPageInputImage.Name = "tabPageInputImage";
            tabPageInputImage.Padding = new Padding(4);
            tabPageInputImage.Size = new Size(790, 611);
            tabPageInputImage.TabIndex = 0;
            tabPageInputImage.Text = "输入图像";
            tabPageInputImage.UseVisualStyleBackColor = true;
            //
            // tabPageRecordImage
            //
            tabPageRecordImage.Controls.Add(pnlRecordImage);
            tabPageRecordImage.Location = new Point(4, 29);
            tabPageRecordImage.Margin = new Padding(4);
            tabPageRecordImage.Name = "tabPageRecordImage";
            tabPageRecordImage.Padding = new Padding(4);
            tabPageRecordImage.Size = new Size(790, 611);
            tabPageRecordImage.TabIndex = 1;
            tabPageRecordImage.Text = "结果图像";
            tabPageRecordImage.UseVisualStyleBackColor = true;
            //
            // pnlRecordImage
            //
            pnlRecordImage.Dock = DockStyle.Fill;
            pnlRecordImage.Location = new Point(4, 4);
            pnlRecordImage.Margin = new Padding(5);
            pnlRecordImage.Name = "pnlRecordImage";
            pnlRecordImage.Size = new Size(782, 603);
            pnlRecordImage.TabIndex = 45;
            //
            // HImageEnhancementToolEdit
            //
            AutoScaleDimensions = new SizeF(9F, 20F);
            AutoScaleMode = AutoScaleMode.Font;
            Controls.Add(MainTableLayoutPanel);
            Controls.Add(BtmStatusStrip);
            Controls.Add(TopToolStrip);
            Margin = new Padding(3, 4, 3, 4);
            Name = "HImageEnhancementToolEdit";
            Size = new Size(1342, 705);
            TopToolStrip.ResumeLayout(false);
            TopToolStrip.PerformLayout();
            BtmStatusStrip.ResumeLayout(false);
            BtmStatusStrip.PerformLayout();
            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();
            imgTabControl.ResumeLayout(false);
            tabPageInputImage.ResumeLayout(false);
            tabPageRecordImage.ResumeLayout(false);
            ResumeLayout(false);
            PerformLayout();
        }
        #endregion
        private System.Windows.Forms.Panel pnlInputImage;
        private ToolStrip TopToolStrip;
        private ToolStripButton btnRun;
        private StatusStrip BtmStatusStrip;
        private ToolStripStatusLabel lblResult;
        private ToolStripStatusLabel lblMsg;
        private TableLayoutPanel MainTableLayoutPanel;
        private ToolStripButton btnLoadImage;
        private TabControl parasTabControl;
        private TabPage tabPage1;
        private TabPage tabPage5;
        private TabControl imgTabControl;
        private TabPage tabPageInputImage;
        private TabPage tabPageRecordImage;
        private ToolStripButton btnSaveParas;
        private ToolStripButton btnLoadParas;
        private Panel pnlRecordImage;
        private ToolStripStatusLabel lblRunTime;
        private TableLayoutPanel tableLayoutPanel2;
        public ComboBox cmbTypeRoi;
        private Label label21;
        private Label label22;
        private ComboBox cmbFixture;
        private CheckBox ckbDrawRoi;
        private TableLayoutPanel tableLayoutPanel1;
        private TableLayoutPanel tableLayoutPanel3;
        private Label labelImageEnhancement;
        private ComboBox cmbImageEnhancement;
        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
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,466 @@
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;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LB_VisionProcesses.Alogrithms.Halcon
{
    public partial class HImageEnhancementToolEdit : TAlgorithmEdit
    {
        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
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <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>340, 17</value>
  </metadata>
</root>
LB_VisionProcesses/ProcessEditForm.cs
@@ -99,7 +99,7 @@
                    e.Cancel = true;  //取消关闭窗体
                    return;
                }
                if (res == DialogResult.Yes && OriProcess != null)  //保存VPP
                {
                    //利用反射创建实例,命名规范:Tool+Edit