C3031
2026-01-30 0ab0fde3216783ee2694d8d4bfbb94237e25a4bb
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.cs
@@ -2,6 +2,8 @@
using LB_SmartVisionCommon;
using LB_VisionControl;
using LB_VisionProcesses.Alogrithms.Halcon;
using Microsoft.VisualBasic.ApplicationServices;
using OpenCvSharp;
using Sunny.UI.Win32;
using System;
using System.Collections.Generic;
@@ -12,12 +14,13 @@
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace LB_VisionProcesses.Alogrithms.Halcon
{
    public partial class HImageEnhancementToolEdit : TAlgorithmEdit
    {
        List<RecordImageEnhancementData> recordImageEnhancementDatas = new List<RecordImageEnhancementData>();
        private int rowriginalHeight;
        public HImageEnhancementToolEdit(HImageEnhancementTool subject = null)
        {
@@ -26,42 +29,47 @@
            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;
            //if (!(Subject.Params.ROI is HSegment))
            //    Subject.Params.ROI = new HSegment(0, 0, 250, 250);
            this.Dock = DockStyle.Fill;
            InitializeComponent();
            // 保存原始行高度
            rowriginalHeight = (int)tableLayoutPanel4.RowStyles[1].Height;
            InitializeComboBox();
            InitializeDataGridView();
            recordImageEnhancementDatas = ImageEnhancementManager.Instance.GetAllUsers();
            this.dataGridViewIE.DataSource = recordImageEnhancementDatas;
            this.dataGridViewIE.AutoGenerateColumns = true;
        }
        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比例增强");
            // 添加权限选项
            foreach (var item in Enum.GetValues(typeof(ImageEnhancementDataType)))
            {
                cmbImageEnhancement.Items.Add(item.ToString());
            }
            // 设置默认选择项
            cmbImageEnhancement.SelectedIndex = 2;
        }
        #region 图像增强算法选择下拉框
        #region 算法选择下拉框
        private void cmbImageEnhancement_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cb = sender as ComboBox;
            System.Windows.Forms.ComboBox cb = sender as System.Windows.Forms.ComboBox;
            if (cb.SelectedIndex == 0)
            {
                ShowRow();
            }
            else if (cb.SelectedIndex == 1)
            {
                HideRow();
            }
            else
            {
                HideRow();
            }
@@ -98,13 +106,7 @@
        #endregion
        private void InitializeDataGridView()
        {
            //this.dataGridViewIE.DataSource = recordUserDatas;
            // 设置列标题
            dataGridViewIE.Columns[0].Name = "滤波器类型";
            dataGridViewIE.Columns[1].Name = "掩膜宽度";
            dataGridViewIE.Columns[2].Name = "掩膜高度";
            dataGridViewIE.Columns[3].Name = "增强因子";
            this.dataGridViewIE.DataSource = recordImageEnhancementDatas;
            // 设置DataGridView列宽
            dataGridViewIE.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
@@ -128,8 +130,8 @@
                cmbTypeRoi.Items.Add(value.ToString());
            //遍历可以选择的图像增强类型枚举
            foreach (var value in Enum.GetValues(typeof(ImageEnhancementType)))
                cmbImageEnhancement.Items.Add(value.ToString());
            //foreach (var value in Enum.GetValues(typeof(ImageEnhancementType)))
            //    cmbImageEnhancement.Items.Add(value.ToString());
            //遍历可以选择的Fixture枚举
            cmbFixture.Items.Add("");
@@ -138,7 +140,7 @@
            ckbDrawRoi.Checked = true;
            cmbTypeRoi.Text = RoiType.Segment.ToString();
            cmbImageEnhancement.Text = Transition.Ignore.ToString();
            cmbImageEnhancement.Text = ImageEnhancementType.ScaleMax.ToString();
            LoadParas();
            if (Subject.Result)
@@ -156,7 +158,125 @@
            lblMsgToolTip.SetToolTip(BtmStatusStrip, Msg);
            lblRunTime.Text = $"{Subject.RunTime}ms";
        }
        private void ClearInputFields()
        {
            txtMaskWidth.Clear();
            txtMaskHeight.Clear();
            txtFactor.Clear();
            cmbImageEnhancement.SelectedIndex = 0;
        }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            // 验证输入
            if (cmbImageEnhancement.SelectedIndex == 0)
            {
                if (string.IsNullOrWhiteSpace(txtMaskWidth.Text) || string.IsNullOrWhiteSpace(txtMaskHeight.Text) || string.IsNullOrWhiteSpace(txtFactor.Text))
                {
                    MessageBox.Show("请填写所有必填字段!", "提示",
                        MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
            }
            RecordImageEnhancementData filter = new RecordImageEnhancementData();
            filter.MaskWidth = this.txtMaskWidth.Text;
            filter.MaskHight = this.txtMaskHeight.Text;
            filter.Factor = this.txtFactor.Text;
            filter.FilterName = (ImageEnhancementDataType)this.cmbImageEnhancement.SelectedIndex;
            // 添加到 UserManager
            bool success = ImageEnhancementManager.Instance.AddUser(filter);
            if (success)
            {
                recordImageEnhancementDatas.Add(filter);
                //MessageBox.Show("用户添加成功!", "提示",
                //    MessageBoxButtons.OK, MessageBoxIcon.Information);
                // 清空输入框
                ClearInputFields();
            }
            else
            {
                MessageBox.Show("添加用户失败!", "错误",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            recordImageEnhancementDatas = ImageEnhancementManager.Instance.GetAllUsers();
            this.dataGridViewIE.DataSource = recordImageEnhancementDatas;
            this.dataGridViewIE.AutoGenerateColumns = true;
        }
        private void btnDel_Click(object sender, EventArgs e)
        {
            // 检查是否有选中的滤波类型
            if (cmbImageEnhancement.SelectedIndex < 0)
            {
                MessageBox.Show("请选择要删除的滤波类型!", "提示",
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            try
            {
                DataGridViewRow selectedRow = dataGridViewIE.SelectedRows[0];
                string filterToDel = selectedRow.Cells[0].Value?.ToString();
                ImageEnhancementDataType filterToDelete = (ImageEnhancementDataType)cmbImageEnhancement.SelectedIndex;
                // 查找对应的记录
                RecordImageEnhancementData filterToRemove = null;
                // 从本地列表中查找
                foreach (var filter in recordImageEnhancementDatas)
                {
                    if (filter.FilterName.ToString() == filterToDel)
                    {
                        filterToRemove = filter;
                        break;
                    }
                }
                if (filterToRemove == null)
                {
                    MessageBox.Show("未找到对应的记录!", "提示",
                        MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                // 确认删除
                DialogResult result = MessageBox.Show(
                    $"确定要删除 '{filterToDel}' 记录吗?",
                    "确认删除",
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Question,
                    MessageBoxDefaultButton.Button2); // 默认选择"否"
                if (result == DialogResult.No)
                    return;
                // 从管理器中删除
                bool success = ImageEnhancementManager.Instance.DeleteUser(filterToRemove);
                if (success)
                {
                    // 从本地列表中删除
                    recordImageEnhancementDatas.Remove(filterToRemove);
                    MessageBox.Show("删除成功!", "提示",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("删除失败!", "错误",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                recordImageEnhancementDatas = ImageEnhancementManager.Instance.GetAllUsers();
                this.dataGridViewIE.DataSource = recordImageEnhancementDatas;
                this.dataGridViewIE.AutoGenerateColumns = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("请选择要删除的算子");
            }
        }
        /// <summary>
        /// 更新运行参数
        /// </summary>
@@ -262,22 +382,8 @@
                }
            }));
        }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            switch (cmbImageEnhancement.SelectedIndex)
            {
                case 0:
                    break;
                case 1:
                    break;
                case 2:
                    break;
            }
        }
        #region 工具栏按钮事件
        /// <summary>
        /// 点击运行
        /// </summary>
@@ -339,7 +445,7 @@
                GC.Collect();
            }));
        }
        #region 工具栏按钮事件
        /// <summary>
        /// 工具栏“导图”
        /// </summary>
@@ -449,7 +555,7 @@
            }
            catch { }
        }
        #endregion
        public override void cmbFixture_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
@@ -461,6 +567,8 @@
            }
            catch { }
        }
        #endregion
    }
}