| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847 | using NewSegDll;using OpenCvSharp;using PaintDotNet.Adjust;using PaintDotNet.Annotation.Enum;using PaintDotNet.Base;using PaintDotNet.Base.Functionodel;using PaintDotNet.Binarization;using PaintDotNet.Data.Param;using PaintDotNet.Processing;using System;using System.Collections.Generic;using System.Drawing.Imaging;using System.Globalization;using System.Windows.Forms;namespace PaintDotNet.Menus{    /// <summary>    /// 二值操作    /// </summary>    internal sealed class BinaryActionMenu : PdnMenuItem    {        private PdnMenuItem menuBinaryExtraction;        private PdnMenuItem menuPhaseExtraction;        private PdnMenuItem menuNsegExtraction;        private ToolStripSeparator menuHelpSeparator1;        private PdnMenuItem menuErosionExtraction;        private PdnMenuItem menuDilationExtraction;        private PdnMenuItem menuThickening;        private PdnMenuItem menuThinning;        private PdnMenuItem menuOpenExtraction;        private PdnMenuItem menuCloseExtraction;        private PdnMenuItem menuMorphologySegment;        private PdnMenuItem menuWatershedSegment;        private PdnMenuItem menuDebrisAction;        private PdnMenuItem menuSkeletonAction;        private PdnMenuItem menuHoleFilling;        private PdnMenuItem menuHoleRemoval;        private ToolStripSeparator menuHelpSeparator2;        private PdnMenuItem menuObjectAction;        private ToolStripSeparator menuHelpSeparator3;        private PdnMenuItem menuSingleExtraction;        private ToolStripSeparator menuHelpSeparator4;        private PdnMenuItem menuLinearSegmentation;        private ToolStripSeparator menuHelpSeparator5;        private PdnMenuItem menuSingleDelete;        private PdnMenuItem menuRectangleDelete;        private PdnMenuItem menuPolygonleDelete;        private ToolStripSeparator menuHelpSeparator6;        private PdnMenuItem menuTrackAdd;        private ToolStripSeparator menuHelpSeparator7;        private PdnMenuItem menuContinuousOperation;        //        // 以下是非模态对话框        //        //脚本管理窗口        private ObjectActionDialog objectActionDialog;        public BinaryActionMenu(int menuId)        {            InitializeComponent();            this.MenuId = menuId;        }        protected override void OnAppWorkspaceChanged()        {            base.OnAppWorkspaceChanged();        }        private void InitializeComponent()        {            this.menuBinaryExtraction = new PdnMenuItem(ActionType.ActionBinaryExtraction);            this.menuPhaseExtraction = new PdnMenuItem(ActionType.ActionPhaseExtraction);            this.menuNsegExtraction = new PdnMenuItem(ActionType.ActionBinaryExtraction);            this.menuPhaseExtraction.AutomaticScript = false;            this.menuHelpSeparator1 = new ToolStripSeparator();            this.menuErosionExtraction = new PdnMenuItem(ActionType.ActionErosion);            this.menuDilationExtraction = new PdnMenuItem(ActionType.ActionDilation);            this.menuThickening = new PdnMenuItem(ActionType.ActionThickening);            this.menuThinning = new PdnMenuItem(ActionType.ActionThinning);            this.menuOpenExtraction = new PdnMenuItem(ActionType.ActionOpenExtraction);            this.menuCloseExtraction = new PdnMenuItem(ActionType.ActionCloseExtraction);            this.menuMorphologySegment = new PdnMenuItem(ActionType.ActionMorphologySegment);            this.menuWatershedSegment = new PdnMenuItem(ActionType.ActionWatershedSegment);            this.menuDebrisAction = new PdnMenuItem(ActionType.ActionDebris);            this.menuDebrisAction.AutomaticScript = false;            this.menuSkeletonAction = new PdnMenuItem(ActionType.ActionSkeleton);            this.menuSkeletonAction.AutomaticScript = false;            this.menuHoleFilling = new PdnMenuItem(ActionType.ActionHoleFilling);            this.menuHoleFilling.AutomaticScript = false;            this.menuHoleRemoval = new PdnMenuItem(ActionType.ActionHoleRemoval);            this.menuHoleRemoval.AutomaticScript = false;            this.menuHelpSeparator2 = new ToolStripSeparator();            this.menuObjectAction = new PdnMenuItem(ActionType.ActionObject);            this.menuHelpSeparator3 = new ToolStripSeparator();            this.menuSingleExtraction = new PdnMenuItem(ActionType.ActionSingleExtraction);            this.menuHelpSeparator4 = new ToolStripSeparator();            this.menuLinearSegmentation = new PdnMenuItem(ActionType.ActionLinearSegmentation);            this.menuHelpSeparator5 = new ToolStripSeparator();            this.menuSingleDelete = new PdnMenuItem(ActionType.ActionSingleDelete);            this.menuRectangleDelete = new PdnMenuItem(ActionType.ActionRectangleDelete);            this.menuPolygonleDelete = new PdnMenuItem(ActionType.ActionPolygonleDelete);            this.menuHelpSeparator6 = new ToolStripSeparator();            this.menuTrackAdd = new PdnMenuItem(ActionType.ActionTrackAdd);            this.menuHelpSeparator7 = new ToolStripSeparator();            this.menuContinuousOperation = new PdnMenuItem(ActionType.ActionContinuousOperation, true);            this.menuContinuousOperation.CanUseInScript = false;            this.menuContinuousOperation.AutomaticScript = false;            //            // 主菜单            //            this.DropDownItems.AddRange(new ToolStripItem[] {                this.menuBinaryExtraction,                this.menuPhaseExtraction,                this.menuNsegExtraction,                this.menuHelpSeparator1,                this.menuErosionExtraction,                this.menuDilationExtraction,                this.menuThickening,                this.menuThinning,                this.menuOpenExtraction,                this.menuCloseExtraction,                this.menuMorphologySegment,                this.menuWatershedSegment,                this.menuDebrisAction,                this.menuSkeletonAction,                this.menuHoleFilling,                this.menuHoleRemoval,                this.menuHelpSeparator2,                this.menuObjectAction,                this.menuHelpSeparator3,                this.menuSingleExtraction,                this.menuHelpSeparator4,                this.menuLinearSegmentation,                this.menuHelpSeparator5,                this.menuSingleDelete,                this.menuRectangleDelete,                this.menuPolygonleDelete,                this.menuHelpSeparator6,                this.menuTrackAdd,                this.menuHelpSeparator7,                this.menuContinuousOperation            });            this.Name = "Menu.BinaryAction";            this.Text = PdnResources.GetString("Menu.BinaryAction.Text");            //             // 二值提取            //             this.menuBinaryExtraction.Name = "BinaryExtraction";            this.menuBinaryExtraction.Click += new EventHandler(this.binaryExtraction_Click);            //             // 物相提取            //             this.menuPhaseExtraction.Name = "PhaseExtraction";            this.menuPhaseExtraction.Click += new EventHandler(this.phaseExtraction_Click);            //            // 晶界重现            //            this.menuNsegExtraction.Visible = Startup.showNsegExtraction;            this.menuNsegExtraction.Name = "NsetExtraction";            this.menuNsegExtraction.Text = "晶界重现";            this.menuNsegExtraction.Click += new EventHandler(this.nsegExtraction_Click);            //            // 腐蚀            //             this.menuErosionExtraction.Name = "ErosionExtraction";            this.menuErosionExtraction.Click += new EventHandler(this.erosionExtraction_Click);            //            // 膨胀            //             this.menuDilationExtraction.Name = "DilationExtraction";            this.menuDilationExtraction.Click += new EventHandler(this.dilationExtraction_Click);            //            // 粗化            //            this.menuThickening.Name = "Thickening";            this.menuThickening.Click += new EventHandler(this.menuThickening_Click);            //            // 细化            //            this.menuThinning.Name = "Thinning";            this.menuThinning.Click += new EventHandler(this.menuThinning_Click);            //            // 开运算            //            this.menuOpenExtraction.Name = "OpenExtraction";            this.menuOpenExtraction.Click += new EventHandler(this.menuOpenExtraction_Click);            //            // 闭运算            //            this.menuCloseExtraction.Name = "CloseExtraction";            this.menuCloseExtraction.Click += new EventHandler(this.menuCloseExtraction_Click);            //            // 形态学分割            //            this.menuMorphologySegment.Name = "MorphologySegment";            this.menuMorphologySegment.Click += new EventHandler(this.menuMorphologySegment_Click);            //            // 分水岭分割            //            this.menuWatershedSegment.Name = "WatershedSegment";            this.menuWatershedSegment.Click += new EventHandler(this.menuWatershedSegment_Click);            //            // 去碎屑            //            this.menuDebrisAction.Name = "DebrisAction";            this.menuDebrisAction.Click += new EventHandler(this.menuDebrisAction_Click);            //            // 抽骨架            //            this.menuSkeletonAction.Name = "SkeletonAction";            this.menuSkeletonAction.Click += new EventHandler(this.menuSkeletonAction_Click);            //            // 孔洞填充            //            this.menuHoleFilling.Name = "HoleFilling";            this.menuHoleFilling.Click += new EventHandler(this.menuHoleFilling_Click);            //            // 孔洞删除            //            this.menuHoleRemoval.Name = "HoleRemoval";            this.menuHoleRemoval.Click += new EventHandler(this.menuHoleRemoval_Click);            //            // 对象处理            //            this.menuObjectAction.Name = "ObjectAction";            this.menuObjectAction.NeedWaitKey = true;            this.menuObjectAction.Click += new EventHandler(this.menuObjectAction_Click);            //            // 单个提取            //            this.menuSingleExtraction.Name = "SingleExtraction";            this.menuSingleExtraction.NeedWaitKey = true;            this.menuSingleExtraction.Click += new EventHandler(this.menuSingleExtraction_Click);            //            // 直线分割            //            this.menuLinearSegmentation.Name = "LinearSegmentation";            this.menuLinearSegmentation.NeedWaitKey = true;            this.menuLinearSegmentation.Click += new EventHandler(this.menuLinearSegmentation_Click);            //            // 单个删除            //            this.menuSingleDelete.Name = "SingleDelete";            this.menuSingleDelete.NeedWaitKey = true;            this.menuSingleDelete.Click += new EventHandler(this.menuSingleDelete_Click);            //            // 矩形删除            //            this.menuRectangleDelete.Name = "RectangleDelete";            this.menuRectangleDelete.NeedWaitKey = true;            this.menuRectangleDelete.Click += new EventHandler(this.menuRectangleDelete_Click);            //            // 多边形删除            //            this.menuPolygonleDelete.Name = "PolygonleDelete";            this.menuPolygonleDelete.NeedWaitKey = true;            this.menuPolygonleDelete.Click += new EventHandler(this.menuPolygonleDelete_Click);            //            // 轨迹添加            //            this.menuTrackAdd.Name = "TrackAdd";            this.menuTrackAdd.NeedWaitKey = true;            this.menuTrackAdd.Click += new EventHandler(this.menuTrackAdd_Click);            //            // 连续操作            //            this.menuContinuousOperation.Name = "ContinuousOperation";            //this.menuContinuousOperation.NeedWaitKey = true;            this.menuContinuousOperation.Click += new EventHandler(this.menuContinuousOperation_Click);                        //            // 加载菜单的文字和icon            //            this.LoadNames(this.Name);            this.LoadIcons();        }        protected override void OnDropDownOpening(EventArgs e)        {            this.menuContinuousOperation.Checked = AppWorkspace.ActiveDocumentWorkspace != null ? AppWorkspace.ActiveDocumentWorkspace.ContinuousBinaryAction : false;            base.OnDropDownOpening(e);        }        /// <summary>        /// 二值提取        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void binaryExtraction_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)                new BinaryExtractDialog(AppWorkspace/*, ActionType.ActionBinaryExtraction*/, PdnResources.GetString("Menu.BinaryAction.BinaryExtraction.Text")/*;//待修改中文资源-scc备注 20191219*/,(PdnMenuItem)sender).ShowDialog();        }        /// <summary>        /// 物相提取        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void phaseExtraction_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)             {                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                new PhaseExtractDialog(AppWorkspace, PdnResources.GetString("Menu.BinaryAction.PhaseExtraction.Text")/*;//待修改中文资源-scc备注 20191219*/, this.MenuId).ShowDialog();            }        }        /// <summary>        /// 晶界重现        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void nsegExtraction_Click(object sender, EventArgs e)        {            //string inputImageFile = @"C:\Users\win10SSD\Desktop\切片demo\阻抗圖片\晶界重现\微信图片_20210715161529.jpg";// 微信图片_20210715161509.jpg";// @"E:\工作目录\晶界重现\new-Seg-1-210713release\j1.JPG";// "D:\\j1.JPG";            Mat OrgImg = null;// = OpenCvSharp.Cv2.ImRead(inputImageFile);            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                OrgImg = AppWorkspace.ActiveDocumentWorkspace.CompositionSurface.CreatedAliasedMat().CvtColor(ColorConversionCodes.BGRA2BGR);            }            else                return;            Mat OutImg = new Mat(OrgImg.Rows, OrgImg.Cols, MatType.CV_8UC3, Scalar.All(0));            NewSeg NSeg = new NewSeg();            double[] adOutParam = new double[10];            adOutParam[0] = 3;//方法1原方法,方法2模拟软件方法            adOutParam[1] = 0;//默认为暗晶界,为2时为亮晶界            adOutParam[2] = 3;//尺度系数,默认为3            adOutParam[3] = 1;//晶界宽度系数,默认为1            adOutParam[4] = 0;//亮度调整,为0不调整,为1自动调整,为2整体调暗,为3整体调亮,为4线性调整            adOutParam[5] = 1;//adOutParam[4]为2或3时adOutParam[5]有意义,表示调整强度,必须大于1,等于1无变化            adOutParam[6] = 1;//adOutParam[4]为4时adOutParam[6]有意义,线性变换斜率。            adOutParam[7] = 0;//adOutParam[4]为4时adOutParam[7]有意义,线性变换截距。            adOutParam[8] = 0;//为2时表示边界必须细化            adOutParam[9] = 0;//为2时表示边界必须连接            NSeg.DoSeg(OrgImg, OutImg, adOutParam);        }        /// <summary>        /// 腐蚀        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void erosionExtraction_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count == 0)                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                    return;                }                new NormalOperationDialog(AppWorkspace, ActionType.ActionErosion, PdnResources.GetString("Menu.Binaryoperation.corrosion.Binaryoperation-corrosion.text"),(PdnMenuItem)sender).ShowDialog();            }        }        /// <summary>        /// 膨胀        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void dilationExtraction_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count == 0)                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                    return;                }                new NormalOperationDialog(AppWorkspace, ActionType.ActionDilation, PdnResources.GetString("Menu.Binaryoperation.dilation.Binaansion.text"), (PdnMenuItem)sender).ShowDialog();            }        }        /// <summary>        /// 粗化        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuThickening_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count > 0)                {                    new NormalOperationDialog(AppWorkspace, ActionType.ActionThickening, PdnResources.GetString("Menu.Binaryoperation.coarsen.Binaryopersening.text"), (PdnMenuItem)sender).ShowDialog();                }                else                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                }            }         }        /// <summary>        /// 细化        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuThinning_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count > 0)                {                    new NormalOperationDialog(AppWorkspace, ActionType.ActionThinning, PdnResources.GetString("Menu.Binaryoperation.thin.Binaryoperement.text"), (PdnMenuItem)sender).ShowDialog();                }                else                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                }            }        }        /// <summary>        /// 开运算        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuOpenExtraction_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count > 0)                {                    new NormalOperationDialog(AppWorkspace, ActionType.ActionOpenExtraction, PdnResources.GetString("Menu.Binaryoperation.Openoperation.Binaryopereration.text"), (PdnMenuItem)sender).ShowDialog();                }                else                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                }            }        }        /// <summary>        /// 闭运算        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuCloseExtraction_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count > 0)                {                    new NormalOperationDialog(AppWorkspace, ActionType.ActionCloseExtraction, PdnResources.GetString("Menu.Binaryoperation.Closedtion.Binaryoperoperation.text"), (PdnMenuItem)sender).ShowDialog();                }                else                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                }            }        }        /// <summary>        /// 形态学分割        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuMorphologySegment_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count == 0)                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                    return;                }                new NormalOperationDialog(AppWorkspace, ActionType.ActionMorphologySegment, PdnResources.GetString("Menu.Binaryoperation.Morphologientation.Binaryoperatiogment.text"), (PdnMenuItem)sender).ShowDialog();            }         }        /// <summary>        /// 分水岭分割        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuWatershedSegment_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count == 0)                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                    return;                }                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                new NormalOperationDialog(AppWorkspace, ActionType.ActionWatershedSegment, PdnResources.GetString("Menu.Binaryoperation.watersheation.Binaryomentation.text"), (PdnMenuItem)sender).ShowDialog();            }          }        /// <summary>        /// 去碎屑        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuDebrisAction_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count > 0)                {                    if (AppWorkspace.startScriptRecording)                    {                        AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                    }                    new NormalOperationDialog(AppWorkspace, ActionType.ActionDebris, PdnResources.GetString("Menu.Binaryoperation.Removedebris.Binaryopedebris.text"), (PdnMenuItem)sender).ShowDialog();                }                else                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                }            }        }        /// <summary>        /// 抽骨架        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuSkeletonAction_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count > 0)                {                    bool DetermineBinaryImageByHist = false;                    foreach (var item in phases)                    {                        //判断是否二值化图像                        if (Adjust.BaseImage.BaseTools.DetermineBinaryImageByHist(item.mat))                        {                            DetermineBinaryImageByHist = true;                            break;                            //MessageBox.Show("Please enter abinarization image");                            //return mat;                        }                    }                    if (!DetermineBinaryImageByHist)                    {                        //MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                        MessageBox.Show("请选择有效的相进行处理");                        return;                    }                    if (AppWorkspace.startScriptRecording)                    {                        AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                    }                    new NormalOperationDialog(AppWorkspace, ActionType.ActionSkeleton, PdnResources.GetString("Menu.Binaryoperation.skeletonform.Binaryoperanextraction.text"), (PdnMenuItem)sender).ShowDialog();                }                else                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                }            }        }        /// <summary>        /// 孔洞填充,直接操作相        /// 没有相就没有任何变化        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuHoleFilling_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count > 0)                {                    foreach (PhaseModel phaseModel in phases)                    {                        phaseModel.mat = MorphologyIntent.HolesFill(phaseModel.mat, phaseModel.color);                    }                    AppWorkspace.ActiveDocumentWorkspace.Refresh();//HolesFill();                }                else                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                }            }        }        /// <summary>        /// 孔洞删除        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuHoleRemoval_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count > 0)                {                    if (AppWorkspace.startScriptRecording)                    {                        AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                    }                    new NormalOperationDialog(AppWorkspace, ActionType.ActionHoleRemoval, PdnResources.GetString("Menu.Binaryoperation.Holedelete.Binaryoperation.text"), (PdnMenuItem)sender).ShowDialog();                }                else                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                }            }        }                /// <summary>        /// 对象处理        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuObjectAction_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count == 0)                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                    return;                }                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                objectActionDialog = (ObjectActionDialog)Application.OpenForms["ObjectActionDialog"];//尝试获取已经弹出的窗口对象                FloatingFormMethod.ShowFloatForm(objectActionDialog, objectActionDialog == null ? new ObjectActionDialog(AppWorkspace, this.MenuId)/*没有弹出的窗口对象则创建*/ : null, AppWorkspace);                //if (objectActionDialog == null)                //{                //    objectActionDialog = new ObjectActionDialog(AppWorkspace);                //    objectActionDialog.StartPosition = FormStartPosition.CenterScreen;                //    objectActionDialog.Show();                //}                //else                //{                //    if (!objectActionDialog.IsDisposed)                //    {                //        objectActionDialog.WindowState = FormWindowState.Normal;                //    }                //    else                //    {                //        objectActionDialog = new ObjectActionDialog(AppWorkspace);                //        objectActionDialog.StartPosition = FormStartPosition.CenterScreen;                //        objectActionDialog.Show();                //    }                //}            }        }        /// <summary>        /// 单个提取        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuSingleExtraction_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.BinaryExtract;            }        }        /// <summary>        /// 直线分割        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuLinearSegmentation_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.BinarySplitLine;            }        }        /// <summary>        /// 单个删除        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuSingleDelete_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.BinaryDelete;            }        }        /// <summary>        /// 矩形删除        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuRectangleDelete_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.BinaryDeleteRectangle;            }        }        /// <summary>        /// 多边形删除        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuPolygonleDelete_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.BinaryDeletePolygon;            }        }        /// <summary>        /// 轨迹添加        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuTrackAdd_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                List<PhaseModel> phases = this.AppWorkspace.ActiveDocumentWorkspace.PhaseModels.FindAll(a => a.choise == true && a.mat != null);                if (phases.Count > 0)                {                    if (AppWorkspace.startScriptRecording)                    {                        AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                    }                    AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.BinaryAddTrack;                }                else                {                    MessageBox.Show(PdnResources.GetString("Menu.Pleaseselecphasetoprocess.Text"));                }            }        }        /// <summary>        /// 连续操作        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuContinuousOperation_Click(object sender, EventArgs e)        {            if(AppWorkspace.ActiveDocumentWorkspace!=null)            {                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                AppWorkspace.ActiveDocumentWorkspace.ContinuousBinaryAction = !AppWorkspace.ActiveDocumentWorkspace.ContinuousBinaryAction;                this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ContinuousBinaryAction, "ContinuousOperation");                this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ContinuousBinaryAction, "ContinuousOperation");                if (!AppWorkspace.ActiveDocumentWorkspace.ContinuousBinaryAction                     && !(AppWorkspace.ActiveDocumentWorkspace.ActiveTool >= DrawToolType.DrawRectangle && AppWorkspace.ActiveDocumentWorkspace.ActiveTool <= DrawToolType.DrawPrestoredRuler)                      && !(AppWorkspace.ActiveDocumentWorkspace.ActiveTool >= DrawToolType.MeasureLine && AppWorkspace.ActiveDocumentWorkspace.ActiveTool <= DrawToolType.MeasureThreePointArc))                {                    AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.Pointer;                }                this.menuContinuousOperation.Checked = AppWorkspace.ActiveDocumentWorkspace.ContinuousBinaryAction;            }        }        /// <summary>        /// 取消操作        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void menuCancelOperation_Click(object sender, EventArgs e)        {            if (AppWorkspace.ActiveDocumentWorkspace != null)            {                if (AppWorkspace.startScriptRecording)                {                    AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List<Args>());                }                AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.Pointer;            }        }        private string GetCultureInfoName(CultureInfo ci)        {            CultureInfo en_US = new CultureInfo("en-US");            if (ci.Equals(en_US))            {                return GetCultureInfoName(ci.Parent);            }            else            {                return ci.NativeName;            }        }    }}
 |