From 65509ea2a0808389a07a446f2df1cadb16d97dbc Mon Sep 17 00:00:00 2001
From: C3032 <C3032@BC3032>
Date: 星期二, 30 十二月 2025 16:36:05 +0800
Subject: [PATCH] Merge branch 'master' into feature/HR_Camera

---
 LB_SmartVision/VisionForm.cs                                                                    |    2 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.Designer.cs           |    4 
 LB_VisionFlowNode/FlowPanel.cs                                                                  |    2 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dTool.cs                      |   22 
 LB_VisionControl/UserHSmartWindowControl.cs                                                     |    1 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineTool.cs                          |   29 -
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelTool.cs                        |   22 
 LB_VisionProcesses/Alogrithms/BaseAlgorithm/TestTool/TestToolEdit.cs                            |   12 
 LB_VisionProcesses/Alogrithms/OpenCvSharp/FindModelTool/FindModelToolEdit.cs                    |  395 ++++++++---------
 LB_SmartVision/ProcessRun/ProcessContext.cs                                                     |   69 --
 LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs                                       |  297 ++++--------
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.resx                  |    4 
 LB_VisionProcesses/IProcess.cs                                                                  |    4 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.resx                |   11 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelTool.cs              |   22 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HMulitModelControl.Designer.cs      |    4 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.resx        |    4 
 LB_VisionProcesses/Alogrithms/OpenCvSharp/BlobTool/BlobToolEdit.cs                              |   72 +-
 LB_VisionProcesses/Alogrithms/OpenCvSharp/FindLineTool/FindLineToolEdit.cs                      |  230 ++++-----
 LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.Designer.cs                     |    4 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.Designer.cs         |    4 
 LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithmEdit.cs                                   |   19 
 LB_SmartVision/ProcessRun/ProcessRunBll.cs                                                      |    4 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.resx                    |   11 
 LB_VisionProcesses/Processes/BaseProcess.cs                                                     |    4 
 LB_SmartVision/Forms/Pages/ProcessPage/ProcessControl.cs                                        |   16 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobTool.cs                                  |    7 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs             |   28 
 LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.Designer.cs |   32 
 LB_SmartVision/Forms/Pages/ProcessPage/AllProcessesPage.cs                                      |   11 
 30 files changed, 535 insertions(+), 811 deletions(-)

diff --git a/LB_SmartVision/Forms/Pages/ProcessPage/AllProcessesPage.cs b/LB_SmartVision/Forms/Pages/ProcessPage/AllProcessesPage.cs
index 2b2ff11..01ab907 100644
--- a/LB_SmartVision/Forms/Pages/ProcessPage/AllProcessesPage.cs
+++ b/LB_SmartVision/Forms/Pages/ProcessPage/AllProcessesPage.cs
@@ -20,6 +20,7 @@
 
             Name = "AllProcessesPage";
             Text = "涓荤晫闈�";
+            //this.Font = new Font("Microsoft YaHei UI", 16F, FontStyle.Regular, GraphicsUnit.Point, 0);
             this.BackColor = Color.FromArgb(32, 41, 50);
 
             InitVisionUI();
@@ -30,7 +31,6 @@
 
         public void InitVisionUI()
         {
-            this.controlsPanel.Dock = DockStyle.Fill;
             List<string> keys = dicProcessControls.Keys.ToList();
 
             foreach (var title in keys)
@@ -59,9 +59,7 @@
             foreach (var layout in GlobalVar.dicLayout.Values)
             {
                 if (GlobalVar.dicProcesses.ContainsKey(layout.ProcessName))
-                {
                     enableLayout++;
-                }
             }
 
             int index = 0;
@@ -76,13 +74,12 @@
                         ProcessControl processControl = dicProcessControls[title];
                         processControl.Size
                             = new Size(this.controlsPanel.Size.Width / enableLayout
-                            , this.controlsPanel.Size.Height-40);
+                            , this.controlsPanel.Size.Height);
                         processControl.Location
                             = new Point(processControl.Size.Width * index, 0);
+
                         if (GlobalVar.dicProcesses[name].GetImage(GlobalVar.dicLayout[i], out _, out HObject RecordImage))
-                        {
                             dicProcessControls[title].ShowHoImage(RecordImage);
-                        }
                     }
                     else
                     {
@@ -98,9 +95,7 @@
                         this.controlsPanel.Controls.Add(processControl);
 
                         if (GlobalVar.dicProcesses[name].GetImage(GlobalVar.dicLayout[i], out _, out HObject RecordImage))
-                        {
                             dicProcessControls[title].ShowHoImage(RecordImage);
-                        }
                     }
                     index++;
                 }
diff --git a/LB_SmartVision/Forms/Pages/ProcessPage/ProcessControl.cs b/LB_SmartVision/Forms/Pages/ProcessPage/ProcessControl.cs
index a3e21fd..b9febc4 100644
--- a/LB_SmartVision/Forms/Pages/ProcessPage/ProcessControl.cs
+++ b/LB_SmartVision/Forms/Pages/ProcessPage/ProcessControl.cs
@@ -72,9 +72,7 @@
                 }));
             }
             else
-            {
                 UserHSmartWindowControl.ClearObj();
-            }
         }
 
         /// <summary>
@@ -93,9 +91,7 @@
                 }));
             }
             else
-            {
                 this.label1.Text = $"鎬绘暟锛歿ProcessRunBll.total}";
-            }
         }
 
         public bool Run(out string msg)
@@ -107,9 +103,7 @@
             }
 
             if (isCircleRuning || ProcessRunBll.bRuning)
-            {
                 ProcessRunBll.LogInfo($"{ProcessRunBll.Name}姝e湪杩愯", LogInfoType.ERROR);
-            }
 
             ProcessRunBll.Run();
 
@@ -126,9 +120,7 @@
                 try
                 {
                     if (ProcessRunBll == null)
-                    {
                         return;
-                    }
 
                     ProcessRunBll.LogInfo(string.Format("娴佺▼[{0}]寮�濮嬭繍琛�", this.ProcessRunBll.Name), LogInfoType.INFO);
 
@@ -136,9 +128,7 @@
                     result = Run(out msg);
 
                     if (ProcessRunBll.GetImage(_Layout, out _, out HObject RecordImage))
-                    {
                         ShowHoImage(RecordImage);
-                    }
                 }
                 catch { msg = "杩愯鍑虹幇浜嗗紓甯�"; }
 
@@ -166,7 +156,7 @@
                 else
                 {
                     isCircleRuning = false;
-                    //threadCircleRun.Abort();
+                    threadCircleRun.Abort();
                 }
             }
             catch { }
@@ -199,14 +189,12 @@
                         , result ? LogInfoType.PASS : LogInfoType.ERROR);
 
                     if (ProcessRunBll.GetImage(_Layout, out _, out HObject RecordImage))
-                    {
                         ShowHoImage(RecordImage);
-                    }
                 }
                 catch { }
                 //}));
 
-                Thread.Sleep(33);
+                Thread.Sleep(100);
             }
         }
 
diff --git a/LB_SmartVision/ProcessRun/ProcessContext.cs b/LB_SmartVision/ProcessRun/ProcessContext.cs
index ff803a2..6f32ad5 100644
--- a/LB_SmartVision/ProcessRun/ProcessContext.cs
+++ b/LB_SmartVision/ProcessRun/ProcessContext.cs
@@ -301,7 +301,7 @@
             return res;
         }
 
-        public bool GetImage(Layout layout, out HImage InputImage, out HObject RecordImage)
+        public bool GetImage(Layout layout, out HObject InputImage, out HObject RecordImage)
         {
             InputImage = null; RecordImage = null;
             try
@@ -329,37 +329,24 @@
                     IndexValueName = arrOutputs[2];
 
                     object o_InputImage = ((IProcess)dicContext[IndexProcessName]).OutputImage;
-                    if (o_InputImage != null && o_InputImage is HImage ho_image && ho_image.IsInitialized())
-                    {
-                        InputImage = ho_image.Clone();
-                        ho_image.Dispose();
-                    }
-                    else if (o_InputImage != null && o_InputImage is Bitmap)
+                    if (o_InputImage is HObject ho_image && ho_image.IsInitialized())
+                        InputImage = ho_image;
+                    else if (o_InputImage is Bitmap)
                     {
                         //灏哅at杞崲涓篐Object
-                        using (HImage ho_RecordImage = TAlgorithm.Bitmap2HObject((Bitmap)o_InputImage))
-                        {
-                            if (ho_RecordImage != null)
-                            {
-                                InputImage = ho_RecordImage.Clone();
-                            }
-                        }
+                        TAlgorithm.Bitmap2HObject((Bitmap)o_InputImage, out HObject ho_RecordImage);
+                        InputImage = ho_RecordImage;
                     }
-                    else if (o_InputImage != null && o_InputImage is Mat)
+                    else if (o_InputImage is Mat)
                     {
                         //灏哅at杞崲涓篐Object
-                        using (HImage ho_RecordImage = TAlgorithm.Mat2HObject((Mat)o_InputImage))
-                        {
-                            if (ho_RecordImage != null)
-                            {
-                                InputImage = ho_RecordImage.Clone();
-                            }
-                        }
+                        TAlgorithm.Mat2HObject((Mat)o_InputImage, out HObject ho_RecordImage);
+                        InputImage = ho_RecordImage;
                     }
 
                     if (InputImage != null && InputImage.IsInitialized())
                     {
-                        InputImage.GetImageSize(out ho_ImageWidth, out ho_ImageHeight);
+                        HOperatorSet.GetImageSize(InputImage, out ho_ImageWidth, out ho_ImageHeight);
 
                         //鍥剧墖灏哄鍙樺寲鎵嶆洿鏂扮獥鍙e昂瀵竅鎻愰珮閫熷害]
                         if ((ho_ImageWidth.Length > 0 && ho_ImageWidth.TupleInt() != hWindowControl.Size.Width)
@@ -502,38 +489,7 @@
                 if (dicContext.TryGetValue(ProcessName, out IProcess obj)
                     && obj is IProcess process)
                 {
-                    if (process.InputImage != null)
-                    {
-                        if (process.InputImage is HObject)
-                        {
-                            ((HObject)process.InputImage).Dispose();
-                        }
-                        else if (process.InputImage is Mat)
-                        {
-                            ((Mat)process.InputImage).Dispose();
-                        }
-                        else if (process.InputImage is Bitmap)
-                        {
-                            ((Bitmap)process.InputImage).Dispose();
-                        }
-                        process.InputImage = null;
-                    }
-                    if (process.OutputImage != null)
-                    {
-                        if (process.OutputImage is HObject)
-                        {
-                            ((HObject)process.OutputImage).Dispose();
-                        }
-                        else if (process.OutputImage is Mat)
-                        {
-                            ((Mat)process.OutputImage).Dispose();
-                        }
-                        else if (process.OutputImage is Bitmap)
-                        {
-                            ((Bitmap)process.OutputImage).Dispose();
-                        }
-                        process.OutputImage = null;
-                    }
+                    process.InputImage = null;
                     UpdateInputs(process);
 
                     // 涓嶅悓鑺傜偣璺宠繃鐨勬柟寮忎笉鍚�
@@ -583,9 +539,10 @@
         [Node("鐩告満鍙栧浘", "鍙栧儚宸ュ叿", "Basic", "鐩告満鍙栧浘")]
         public void 鐩告満鍙栧浘(FlowNode node) { RunNodeAsync(node); }
 
-        [Node("Halcon2D鏂戠偣宸ュ叿", "Halcon2D宸ュ叿", "Basic", "Halcon2D鏂戠偣宸ュ叿")]
+        [Node("Halcon2D鏂戠偣宸ュ叿", "Haclon2D宸ュ叿", "Basic", "Halcon2D鏂戠偣宸ュ叿")]
         public void Halcon2D鏂戠偣宸ュ叿(FlowNode node) { RunNodeAsync(node); }
 
+
         #endregion
 
 
diff --git a/LB_SmartVision/ProcessRun/ProcessRunBll.cs b/LB_SmartVision/ProcessRun/ProcessRunBll.cs
index 547af4d..ddd7a6c 100644
--- a/LB_SmartVision/ProcessRun/ProcessRunBll.cs
+++ b/LB_SmartVision/ProcessRun/ProcessRunBll.cs
@@ -121,12 +121,12 @@
         /// </summary>
         public double RunTime = 0;
 
-        public bool GetImage(Forms.Pages.SettingPage.Layout layout, out HImage InputImage, out HObject RecordImage)
+        public bool GetImage(Forms.Pages.SettingPage.Layout layout, out HObject InputImage, out HObject RecordImage)
         {
             return ProcessContext.GetImage(layout, out InputImage, out RecordImage);
         }
 
-        public bool GetImage(out HImage InputImage, out HObject RecordImage)
+        public bool GetImage(out HObject InputImage, out HObject RecordImage)
         {
             InputImage = null;
             RecordImage = null;
diff --git a/LB_SmartVision/VisionForm.cs b/LB_SmartVision/VisionForm.cs
index a1b5452..971f1cb 100644
--- a/LB_SmartVision/VisionForm.cs
+++ b/LB_SmartVision/VisionForm.cs
@@ -1439,7 +1439,7 @@
                         catch { }
                     }
                     // 鐢熸垚鍥剧墖骞舵樉绀哄埌鎺т欢涓�
-                    HImage InputImage = null;
+                    HObject InputImage = null;
                     HObject RecordImage = null;
 
                     foreach (var layout in GlobalVar.dicLayout.Values
diff --git a/LB_VisionControl/UserHSmartWindowControl.cs b/LB_VisionControl/UserHSmartWindowControl.cs
index a1c3acb..473f2a7 100644
--- a/LB_VisionControl/UserHSmartWindowControl.cs
+++ b/LB_VisionControl/UserHSmartWindowControl.cs
@@ -1,4 +1,5 @@
 锘縰sing HalconDotNet;
+using Sunny.UI.Win32;
 using System.Diagnostics;
 
 namespace LB_VisionControl
diff --git a/LB_VisionFlowNode/FlowPanel.cs b/LB_VisionFlowNode/FlowPanel.cs
index eb8c279..6f295fd 100644
--- a/LB_VisionFlowNode/FlowPanel.cs
+++ b/LB_VisionFlowNode/FlowPanel.cs
@@ -304,7 +304,7 @@
             context.CurrentBranchName = $"{currentNode.Text}-Branch{currentNode.BranchIndex}";
             bool result = Context.ExecuteNode(currentNode);
 #if DEBUG
-            Debug.WriteLine($"鎵ц鑺傜偣[{currentNode.Text}],缁撴灉涓簕result}");
+            Debug.WriteLine(DateTime.Now.ToString("[yyyy:MM:dd:HH:mm:ss:fff] ") + $"鎵ц鑺傜偣[{currentNode.Text}],缁撴灉涓簕result}");
 #endif
             context.BranchResults.TryAdd(context.CurrentBranchName, currentNode.Result);
             currentNode.Result = result;
diff --git a/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs b/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs
index 919f3bd..8e76cd9 100644
--- a/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs
+++ b/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs
@@ -41,7 +41,7 @@
         /// <summary>
         /// 璇诲啓閿�
         /// </summary>
-        public readonly object lockObj = new object();
+        public static readonly object lockObj = new object();
 
         /// <summary>
         /// 瑁佸垏鍥剧墖涓篽oDomainImage(淇濈暀鍘熷潗鏍囩郴,鍏朵綑濉厖涓虹┖)
@@ -64,7 +64,7 @@
                 {
                     if (InputImage is Bitmap)
                     {
-                        Bitmap2Mat((Bitmap)InputImage, out Mat src);
+                        TAlgorithm.Bitmap2Mat((Bitmap)InputImage, out Mat src);
 
                         if (Params.Fixture == null)
                             Params.Fixture = new Fixture();
@@ -96,7 +96,7 @@
 
                                 // 4. 鍒涘缓涓庡師鍥惧ぇ灏忕浉鍚岀殑Mat锛屽苟鍒濆鍖栨棤鏁堝��
                                 image = new Mat(src.Size(), src.Type());
-                                ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+                                ((Mat)image).SetTo(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
 
                                 // 5. 鍒涘缓閬僵锛氬湪result涓婄粯鍒舵棆杞煩褰紙鐧借壊濉厖锛�
                                 using (Mat cropped = new Mat(src, boundingRect))
@@ -113,7 +113,7 @@
 
                                 // 2. 鍒涘缓涓庡師鍥惧ぇ灏忕浉鍚岀殑Mat锛屽苟鍒濆鍖栨棤鏁堝��
                                 image = new Mat(src.Size(), src.Type());
-                                ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+                                ((Mat)image).SetTo(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
 
                                 // 3. 鍒涘缓鍦嗗舰閬僵
                                 using (Mat mask = Mat.Zeros(src.Rows, src.Cols, MatType.CV_8UC1))
@@ -127,8 +127,39 @@
                                 image = ((Bitmap)InputImage)?.Clone();
                                 return true;
                         }
-                        Mat2Bitmap((Mat)image, out Bitmap bmp);
+                        TAlgorithm.Mat2Bitmap((Mat)image, out Bitmap bmp);
                         image = bmp;
+                        return true;
+                    }
+                    else if (InputImage is HObject ho_image)
+                    {
+                        if (!ho_image.IsInitialized())
+                            return false;
+
+                        if (Params.Fixture == null)
+                            Params.Fixture = new Fixture();
+
+                        HObject hoDomainImage = null;
+
+                        switch (Params.ROI?.GetType().Name)
+                        {
+                            case "HRectangle2":
+                                HOperatorSet.GenRectangle2(out HObject hRectangle2, (HTuple)(Params.ROI.Row + Params.Fixture.Row), (HTuple)(Params.ROI.Column + Params.Fixture.Column)
+                                    , (HTuple)(Params.ROI.Phi + Params.Fixture.Phi), (HTuple)((HRectangle2)Params.ROI).SemiLength1, (HTuple)((HRectangle2)Params.ROI).SemiLength2);
+                                HOperatorSet.ReduceDomain(ho_image, hRectangle2, out hoDomainImage);
+                                break;
+                            case "HCircle":
+                                HOperatorSet.GenCircle(out HObject hCircle, (HTuple)(Params.ROI.Row + Params.Fixture.Row), (HTuple)(Params.ROI.Column + Params.Fixture.Column)
+                                    , (HTuple)((HCircle)Params.ROI).Radius);
+                                HOperatorSet.ReduceDomain(ho_image, hCircle, out hoDomainImage);
+                                break;
+                            case "ROI":
+                            default:
+                                image = ho_image.CopyObj(1, -1);
+                                return true;
+                        }
+
+                        image = hoDomainImage;
                         return true;
                     }
                     else if (InputImage is Mat)
@@ -162,7 +193,7 @@
 
                                 // 4. 鍒涘缓涓庡師鍥惧ぇ灏忕浉鍚岀殑Mat锛屽苟鍒濆鍖栨棤鏁堝��
                                 image = new Mat(src.Size(), src.Type());
-                                ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+                                ((Mat)image).SetTo(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
 
                                 // 5. 鍒涘缓閬僵锛氬湪result涓婄粯鍒舵棆杞煩褰紙鐧借壊濉厖锛�
                                 using (Mat cropped = new Mat(src, boundingRect))
@@ -179,7 +210,7 @@
 
                                 // 2. 鍒涘缓涓庡師鍥惧ぇ灏忕浉鍚岀殑Mat锛屽苟鍒濆鍖栨棤鏁堝��
                                 image = new Mat(src.Size(), src.Type());
-                                ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+                                ((Mat)image).SetTo(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
 
                                 // 3. 鍒涘缓鍦嗗舰閬僵
                                 using (Mat mask = Mat.Zeros(src.Rows, src.Cols, MatType.CV_8UC1))
@@ -213,112 +244,32 @@
             }
         }
 
-        public virtual bool ReduceDomainImage(object InputImage, ref HImage image)
-        {
-            image = null;
-            if (InputImage == null)
-            {
-                image = null;
-                Msg = "杈撳叆鍥剧墖涓虹┖";
-                Result = false;
-                return false;
-            }
-
-            lock (InputImage)
-            {
-                try
-                {
-                    if (InputImage is HImage ho_image)
-                    {
-                        if (!ho_image.IsInitialized())
-                            return false;
-
-                        if (Params.Fixture == null)
-                            Params.Fixture = new Fixture();
-
-                        HImage hoDomainImage = null;
-
-                        switch (Params.ROI?.GetType().Name)
-                        {
-                            case "HRectangle2":
-                                using (HRegion hRectangle2 = new HRegion())
-                                {
-                                    hRectangle2.GenRectangle2((HTuple)(Params.ROI.Row + Params.Fixture.Row), (HTuple)(Params.ROI.Column + Params.Fixture.Column)
-                                        , (HTuple)(Params.ROI.Phi + Params.Fixture.Phi), (HTuple)((HRectangle2)Params.ROI).SemiLength1, (HTuple)((HRectangle2)Params.ROI).SemiLength2);
-                                    hoDomainImage = ho_image.ReduceDomain(hRectangle2);
-                                }
-                                break;
-                            case "HCircle":
-                                using (HRegion hCircle = new HRegion())
-                                {
-                                    hCircle.GenCircle((HTuple)(Params.ROI.Row + Params.Fixture.Row), (HTuple)(Params.ROI.Column + Params.Fixture.Column)
-                                    , (HTuple)((HCircle)Params.ROI).Radius);
-                                    hoDomainImage = ho_image.ReduceDomain(hCircle);
-                                }
-                                break;
-                            case "ROI":
-                            default:
-                                image = ho_image.CopyObj(1, -1);
-                                return true;
-                        }
-
-                        image = hoDomainImage;
-                        return true;
-                    }
-                    else
-                    {
-                        image = null;
-                        Msg = $"杈撳叆鏍煎紡涓嶆纭畕InputImage.GetType()}";
-                        Result = false;
-                        return false;
-                    }
-                }
-                catch (Exception ex)
-                {
-                    image = null;
-                    Msg = $"瑁佸壀鍖哄煙澶辫触,鍘熷洜鏄�:{ex.ToString()}";
-                    Result = false;
-                    return false;
-                }
-            }
-        }
-
-
         public override void Dispose()
         {
             if (InputImage != null)
             {
                 if (InputImage is HObject)
-                {
                     ((HObject)InputImage).Dispose();
-                }
                 else if (InputImage is Mat)
-                {
                     ((Mat)InputImage).Dispose();
-                }
                 else if (InputImage is Bitmap)
-                {
                     ((Bitmap)InputImage).Dispose();
-                }
+
                 InputImage = null;
             }
 
             if (OutputImage != null)
             {
                 if (OutputImage is HObject)
-                {
                     ((HObject)OutputImage).Dispose();
-                }
                 else if (OutputImage is Mat)
-                {
                     ((Mat)OutputImage).Dispose();
-                }
                 else if (OutputImage is Bitmap)
-                {
                     ((Bitmap)OutputImage).Dispose();
-                }
+
                 OutputImage = null;
             }
+
             if (Record != null)
             {
                 Record.Dispose();
@@ -336,18 +287,13 @@
                 if (InputImage != null)
                 {
                     if (InputImage is HObject ho_image && ho_image.IsInitialized())
-                    {
                         obj.InputImage = ho_image.CopyObj(1, -1);
-                    }
                     else if (InputImage is Mat mat && !mat.Empty())
-                    {
                         obj.InputImage = mat.Clone();
-                    }
                     else if (InputImage is Bitmap bitmap)
-                    {
                         obj.InputImage = bitmap.Clone();
-                    }
                 }
+
                 return obj;
             }
             catch { return (TAlgorithm)MemberwiseClone(); }
@@ -357,32 +303,17 @@
         {
             Result = true;
             bCompleted = false;
-            Msg = string.Empty;
-            //if (InputImage != null)
-            //{
-            //    if (InputImage is HObject)
-            //    {
-            //        ((HObject)InputImage).Dispose();
-            //    }
-            //    else if (InputImage is Mat)
-            //    {
-            //        ((Mat)InputImage).Dispose();
-            //    }
-            //    else if (InputImage is Bitmap)
-            //    {
-            //        ((Bitmap)InputImage).Dispose();
-            //    }
-            //    InputImage = null;
-            //}
+            Msg = "";
+            OutputImage = null;
+
             if (Record != null)
-            {
                 Record.Dispose();
-            }
         }
 
         public override bool Run()
         {
             DateTime StartTime = DateTime.Now;
+
             InitRunParams();
             HOperatorSet.GenEmptyObj(out HObject EmptyObj);
             OutputImage = EmptyObj;
@@ -400,6 +331,7 @@
 
                 Thread.Sleep(30);
             }
+
             Msg = "杩愯瓒呮椂";
             Result = false;
             RunTime = (DateTime.Now - StartTime).TotalMilliseconds;
@@ -425,9 +357,8 @@
             try
             {
                 if (string.IsNullOrEmpty(fullPath))
-                {
                     return false;
-                }
+
                 if (!fullPath.Contains(".json"))
                 {
                     Debug.WriteLine("鏂囦欢璺緞涓嶅畬鏁�");
@@ -438,6 +369,7 @@
                     Debug.WriteLine("鏂囦欢璺緞涓嶅畬鏁�");
                     return false;
                 }
+
                 // 鑾峰彇涓嶅甫鏂囦欢鍚嶇殑鐩綍璺緞
                 string directoryPath = Path.GetDirectoryName(fullPath);
                 strProcessName = Path.GetFileNameWithoutExtension(fullPath);
@@ -448,6 +380,7 @@
                     Save(directoryPath);
                     return true;
                 }
+
                 string strJson = string.Empty;
                 using (StreamReader streamReader = new StreamReader(fullPath, Encoding.UTF8))
                 {
@@ -456,9 +389,8 @@
                 }
                 Params = JsonConvert.DeserializeObject<ProcessParams>(strJson);
                 if (Params == null)
-                {
                     return false;
-                }
+
                 Params.FixDeserializedData();
                 return true;
             }
@@ -521,20 +453,20 @@
                 return value;
         }
 
-        public static HImage Bitmap2HObject(Bitmap bmp)
+        public static void Bitmap2HObject(Bitmap bmp, out HObject image)
         {
             BitmapData srcBmpData;
-            HImage image = null;
+
             try
             {
-                if (bmp.Tag != null && bmp == null || bmp.Width == 0 || bmp.Height == 0)
+                if (bmp == null || bmp.Width == 0 || bmp.Height == 0)
                 {
                     image = null;
-                    return image;
+                    return;
                 }
+
                 lock (bmp)
                 {
-                    image = new HImage();
                     switch (bmp.PixelFormat)
                     {
                         case PixelFormat.Format24bppRgb:
@@ -543,41 +475,35 @@
                             int width = bmp.Width;
                             int height = bmp.Height;
                             int stride = srcBmpData.Stride;
+
                             if (stride == width * 3)
-                            {
-                                image.GenImageInterleaved(srcBmpData.Scan0, "bgr", bmp.Width, bmp.Height, 0, "byte", 0, 0, 0, 0, -1, 0);
-                            }
+                                HOperatorSet.GenImageInterleaved(out image, srcBmpData.Scan0, "bgr", bmp.Width, bmp.Height, 0, "byte", 0, 0, 0, 0, -1, 0);
                             else
-                            {
                                 image = HandleStrideAlignmentBest(srcBmpData.Scan0, width, height, stride);
-                            }
+
                             bmp.UnlockBits(srcBmpData);
                             break;
                         default:
                             srcBmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
-                            image.GenImage1("byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
+                            HOperatorSet.GenImage1(out image, "byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
                             bmp.UnlockBits(srcBmpData);
                             break;
                     }
                 }
-                return image;
+                return;
             }
             catch
             {
-                if (image != null)
-                {
-                    image.Dispose();
-                }
                 image = null;
-                return image;
+                return;
             }
         }
 
-        private static HImage HandleStrideAlignmentBest(IntPtr scan0, int width, int height, int stride)
+        private static HObject HandleStrideAlignmentBest(IntPtr scan0, int width, int height, int stride)
         {
             int expectedStride = width * 3;
             byte[] alignedData = new byte[width * height * 3];
-            HImage image = new HImage();
+
             unsafe
             {
                 byte* srcPtr = (byte*)scan0;
@@ -595,31 +521,31 @@
                             expectedStride
                         );
                     }
-                    image.GenImageInterleaved(new IntPtr(dstPtr), "bgr", width, height, 0, "byte", width, height, 0, 0, -1, 0);
-                    return image;
+                    HOperatorSet.GenImageInterleaved(out HObject ho_img, new IntPtr(dstPtr), "bgr", width, height, 0, "byte", width, height, 0, 0, -1, 0);
+                    return ho_img;
                 }
             }
         }
 
-        public static unsafe void HObject2Bitmap(HImage hImage, out Bitmap bmp)
+        public static unsafe void HObject2Bitmap(HObject hObject, out Bitmap bmp)
         {
             try
             {
-                if (hImage == null || !hImage.IsInitialized())
+                if (hObject == null || !hObject.IsInitialized())
                 {
                     bmp = null;
                     return;
                 }
 
                 // 鑾峰彇鍥惧儚淇℃伅
-                hImage.GetImageSize(out HTuple width, out HTuple height);
-                HTuple channels = hImage.CountChannels();
+                HOperatorSet.GetImageSize(hObject, out HTuple width, out HTuple height);
+                HOperatorSet.CountChannels(hObject, out HTuple channels);
 
                 if (channels.I == 1)
                 {
                     // 鐏板害鍥惧鐞�
                     HTuple ptr, type;
-                    ptr = hImage.GetImagePointer1(out type, out width, out height);
+                    HOperatorSet.GetImagePointer1(hObject, out ptr, out type, out width, out height);
 
                     bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
 
@@ -648,7 +574,7 @@
                 {
                     // 褰╄壊鍥惧鐞嗭紙BGR椤哄簭锛�
                     HTuple ptrR, ptrG, ptrB, type;
-                    hImage.GetImagePointer3(out ptrR, out ptrG, out ptrB, out type, out width, out height);
+                    HOperatorSet.GetImagePointer3(hObject, out ptrR, out ptrG, out ptrB, out type, out width, out height);
 
                     bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
                     BitmapData bmpData = bmp.LockBits(
@@ -685,20 +611,20 @@
             }
         }
 
-        public static HImage Mat2HObject(Mat mat)
+        public static void Mat2HObject(Mat mat, out HObject image)
         {
-            HImage image = null;
             try
             {
                 if (mat == null || mat.Empty())
                 {
-                    return image;
+                    image = null;
+                    return;
                 }
 
                 if (mat.Type() == MatType.CV_8UC3) // 褰╄壊鍥惧儚 (BGR)
                 {
-                    image = new HImage();
-                    image.GenImageInterleaved(
+                    HOperatorSet.GenImageInterleaved(
+                        out image,
                         mat.Data,
                         "bgr",
                         mat.Width,
@@ -709,8 +635,8 @@
                 }
                 else if (mat.Type() == MatType.CV_8UC1) // 鐏板害鍥惧儚
                 {
-                    image = new HImage();
-                    image.GenImage1(
+                    HOperatorSet.GenImage1(
+                        out image,
                         "byte",
                         mat.Width,
                         mat.Height,
@@ -719,13 +645,14 @@
                 else
                 {
                     throw new ArgumentException($"Mat2HObject涓嶆敮鎸佺殑鍥惧儚鏍煎紡锛歿mat.Type()}");
+                    return;
                 }
-                return image;
+                return;
             }
             catch
             {
                 image = null;
-                return image;
+                return;
             }
         }
 
@@ -1311,10 +1238,10 @@
                 HOperatorSet.GenImageConst(out image, "real", hv_xMax + 1, hv_yMax + 1);
                 HOperatorSet.SetGrayval(image, hv_y, hv_x, hv_z);
 
-                //hoperatorset.getimagesize(ho_image, out htuple hv_width, out htuple hv_height);
-                //hoperatorset.genrectangle1(out hobject ho_rectangle, 0, 0, hv_height - 1, hv_width - 1);
-                //hoperatorset.getregionpoints(ho_rectangle, out htuple hv_rows, out htuple hv_columns);
-                //hoperatorset.getgrayval(ho_image, hv_rows, hv_columns, out htuple hv_z);
+                //HOperatorSet.GetImageSize(ho_Image, out HTuple hv_Width, out HTuple hv_Height);
+                //HOperatorSet.GenRectangle1(out HObject ho_Rectangle, 0, 0, hv_Height - 1, hv_Width - 1);
+                //HOperatorSet.GetRegionPoints(ho_Rectangle, out HTuple hv_Rows, out HTuple hv_Columns);
+                //HOperatorSet.GetGrayval(ho_Image, hv_Rows, hv_Columns, out HTuple hv_Z);
             }
             catch { image = null; }
         }
@@ -1325,7 +1252,7 @@
         /// <param name="startPoint"></param>
         /// <param name="endPoint"></param>
         /// <returns></returns>
-        public double GetDistanceP2P(HPoint startPoint, HPoint endPoint)
+        public static double GetDistanceP2P(HPoint startPoint, HPoint endPoint)
         {
             try
             {
@@ -1334,12 +1261,12 @@
             catch { return 9994; }
         }
 
-        public double GetDistanceP2P(Point startPoint, Point endPoint)
+        public static double GetDistanceP2P(Point startPoint, Point endPoint)
         {
             return GetDistanceP2P(new HPoint(startPoint), new HPoint(endPoint));
         }
 
-        public double DistanceP2P(double startX, double startY, double endX, double endY)
+        public static double DistanceP2P(double startX, double startY, double endX, double endY)
         {
             return GetDistanceP2P(new HPoint(startX, startY), new HPoint(endX, endY));
         }
@@ -1350,17 +1277,17 @@
         /// <param name="startPoint"></param>
         /// <param name="endPoint"></param>
         /// <returns></returns>
-        public HPoint GetMidPoint(HPoint startPoint, HPoint endPoint)
+        public static HPoint GetMidPoint(HPoint startPoint, HPoint endPoint)
         {
             return new HPoint((startPoint.X + endPoint.X) / 2, (startPoint.Y + endPoint.Y) / 2);
         }
 
-        public Point GetMidPoint(Point startPoint, Point endPoint)
+        public static Point GetMidPoint(Point startPoint, Point endPoint)
         {
             return new Point((startPoint.X + endPoint.X) / 2, (startPoint.Y + endPoint.Y) / 2);
         }
 
-        public System.Drawing.Point GetMidPoint(System.Drawing.Point startPoint, System.Drawing.Point endPoint)
+        public static System.Drawing.Point GetMidPoint(System.Drawing.Point startPoint, System.Drawing.Point endPoint)
         {
             return new System.Drawing.Point((startPoint.X + endPoint.X) / 2, (startPoint.Y + endPoint.Y) / 2);
         }
@@ -1371,7 +1298,7 @@
         /// <param name="point"></param>
         /// <param name="segment"></param>
         /// <returns></returns>
-        public bool IsPointOnSegment(HPoint pt, HSegment segment, double tolerance = 1e-3)
+        public static bool IsPointOnSegment(HPoint pt, HSegment segment, double tolerance = 1e-3)
         {
             // 璁$畻鐩寸嚎鏂圭▼鐨勭郴鏁�
             double A = segment.EndY - segment.StartX;
@@ -1394,7 +1321,7 @@
             return false;
         }
 
-        public bool IsPointOnSegment(double px, double py, double x1, double y1, double x2, double y2)
+        public static bool IsPointOnSegment(double px, double py, double x1, double y1, double x2, double y2)
         {
             return IsPointOnSegment(new HPoint(px, py), new HSegment(x1, y1, x2, y2));
         }
@@ -1419,7 +1346,7 @@
             catch { return false; }
         }
 
-        public bool IsPointNearRectangleSilde(HPoint pt, HRectangle2 rect, double tolerance = 100)
+        public static bool IsPointNearRectangleSilde(HPoint pt, HRectangle2 rect, double tolerance = 100)
         {
             return IsPointNearRectangleSilde(new System.Drawing.Point((int)pt.X, (int)pt.Y), new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height), tolerance);
         }
@@ -1431,21 +1358,21 @@
         /// <param name="pt2"></param>
         /// <param name="tolerance"></param>
         /// <returns></returns>
-        public bool IsPointNearPoint(HPoint pt1, HPoint pt2, double tolerance = 100)
+        public static bool IsPointNearPoint(HPoint pt1, HPoint pt2, double tolerance = 100)
         {
             if (GetDistanceP2P(pt1, pt2) <= tolerance)
                 return true;
             return false;
         }
 
-        public bool IsPointNearPoint(Point pt1, Point pt2, double tolerance = 100)
+        public static bool IsPointNearPoint(Point pt1, Point pt2, double tolerance = 100)
         {
             if (GetDistanceP2P(pt1, pt2) <= tolerance)
                 return true;
             return false;
         }
 
-        public bool IsPointNearPoint(double x1, double y1, double x2, double y2, int tolerance = 100)
+        public static bool IsPointNearPoint(double x1, double y1, double x2, double y2, int tolerance = 100)
         {
             return IsPointNearPoint(new HPoint(x1, y1), new HPoint(x2, y2), tolerance);
         }
@@ -1458,7 +1385,7 @@
         /// <param name="corner"></param>
         /// <param name="tolerance"></param>
         /// <returns></returns>
-        public bool IsPointNearRectangleCorner(Point pt, Rectangle rect, out string corner, double tolerance = 10)
+        public static bool IsPointNearRectangleCorner(Point pt, Rectangle rect, out string corner, double tolerance = 10)
         {
             try
             {
@@ -1497,7 +1424,7 @@
             catch { corner = ""; return false; }
         }
 
-        public bool IsPointNearRectangleCorner(HPoint pt, HRectangle2 rect, out string corner, double tolerance = 10)
+        public static bool IsPointNearRectangleCorner(HPoint pt, HRectangle2 rect, out string corner, double tolerance = 10)
         {
             try
             {
@@ -1545,7 +1472,7 @@
         /// <param name="p3">绾�2璧峰鐐�</param>
         /// <param name="p4"></param>
         /// <returns></returns>
-        public Point2d? GetLineIntersection(Point2d p1, Point2d p2, Point2d p3, Point2d p4, bool bOnSegment = false)
+        public static Point2d? GetLineIntersection(Point2d p1, Point2d p2, Point2d p3, Point2d p4, bool bOnSegment = false)
         {
             // 鐩寸嚎1鐨勫悜閲�
             double x1 = p1.X, y1 = p1.Y;
@@ -1582,7 +1509,7 @@
         #region Halcon
         // Chapter: Graphics / Output
         // Short Description: Display 3D object models 
-        public void visualize_object_model_3d(HTuple hv_WindowHandle, HTuple hv_ObjectModel3D,
+        public static void visualize_object_model_3d(HTuple hv_WindowHandle, HTuple hv_ObjectModel3D,
             HTuple hv_CamParam, HTuple hv_PoseIn, HTuple hv_GenParamName, HTuple hv_GenParamValue,
             HTuple hv_Title, HTuple hv_Label, HTuple hv_Information, out HTuple hv_PoseOut)
         {
@@ -3310,7 +3237,7 @@
 
         // Chapter: Calibration / Camera Parameters
         // Short Description: Set the value of a specified camera parameter in the camera parameter tuple. 
-        public void set_cam_par_data(HTuple hv_CameraParamIn, HTuple hv_ParamName, HTuple hv_ParamValue,
+        public static void set_cam_par_data(HTuple hv_CameraParamIn, HTuple hv_ParamName, HTuple hv_ParamValue,
             out HTuple hv_CameraParamOut)
         {
             // Local iconic variables 
@@ -3414,7 +3341,7 @@
             }
         }
 
-        public void gen_arrow_contour_xld(out HObject ho_Arrow, HTuple hv_Row1, HTuple hv_Column1,
+        public static void gen_arrow_contour_xld(out HObject ho_Arrow, HTuple hv_Row1, HTuple hv_Column1,
             HTuple hv_Row2, HTuple hv_Column2, HTuple hv_HeadLength, HTuple hv_HeadWidth)
         {
             // Stack for temporary objects 
@@ -3588,7 +3515,7 @@
             }
         }
 
-        public void get_rect2_vertex(HTuple hv_Row, HTuple hv_Column, HTuple hv_Phi, HTuple hv_Length1,
+        public static void get_rect2_vertex(HTuple hv_Row, HTuple hv_Column, HTuple hv_Phi, HTuple hv_Length1,
             HTuple hv_Length2, out HTuple hv_TopLeft_Row, out HTuple hv_TopLeft_Col, out HTuple hv_TopRight_Row,
             out HTuple hv_TopRight_Col, out HTuple hv_LowLeft_Row, out HTuple hv_LowLeft_Col,
             out HTuple hv_LowRight_Row, out HTuple hv_LowRight_Col)
@@ -3795,7 +3722,7 @@
             }
         }
 
-        public void pts_to_best_line(out HObject ho_LineXld, HTuple hv_Rows, HTuple hv_Columns,
+        public static void pts_to_best_line(out HObject ho_LineXld, HTuple hv_Rows, HTuple hv_Columns,
             HTuple hv_IgnoreNum, out HTuple hv_Row1, out HTuple hv_Column1, out HTuple hv_Row2,
             out HTuple hv_Column2)
         {
@@ -3881,7 +3808,7 @@
             }
         }
 
-        public (double, double) CalculateTailValues(HTuple minValue, HTuple maxValue, HTuple mean, HTuple deviation, double tailPercentage = 0.3)
+        public static (double, double) CalculateTailValues(HTuple minValue, HTuple maxValue, HTuple mean, HTuple deviation, double tailPercentage = 0.3)
         {
             // 璁$畻浣庡熬鐏板害鍊�
             double lowTailValue = minValue.TupleReal() + (mean.TupleReal() - minValue.TupleReal()) * tailPercentage;
@@ -3914,7 +3841,7 @@
         /// <param name="hv_Column2">缁撴潫妯潗鏍�</param>
         /// <param name="hv_ResultRow">缁撴灉鐐归泦鍚堢旱鍧愭爣</param>
         /// <param name="hv_ResultColumn">缁撴灉鐐归泦鍚堟í鍧愭爣</param>
-        public void Rake(HObject ho_Image, out HObject ho_Regions, HTuple hv_Elements,
+        public static void Rake(HObject ho_Image, out HObject ho_Regions, HTuple hv_Elements,
             HTuple hv_DetectHeight, HTuple hv_DetectWidth, HTuple hv_Sigma, HTuple hv_Threshold,
             HTuple hv_Transition, HTuple hv_Select, HTuple hv_Row1, HTuple hv_Column1, HTuple hv_Row2,
             HTuple hv_Column2, out HTuple hv_ResultRow, out HTuple hv_ResultColumn)
@@ -5110,7 +5037,7 @@
             catch { }
         }
 
-        public void scale_gray_map(HObject ho_Image, out HObject ho_Image1, HTuple hv_Min, HTuple hv_Max)
+        public static void scale_gray_map(HObject ho_Image, out HObject ho_Image1, HTuple hv_Min, HTuple hv_Max)
         {
             HTuple hv_Mult = new HTuple(), hv_Add = new HTuple();
             HOperatorSet.GenEmptyObj(out ho_Image1);
@@ -5197,7 +5124,7 @@
 
         #region OpenCVSharp
         // 鏍规嵁Mat绫诲瀷杩斿洖瀵瑰簲鐨勬棤鏁堝��
-        public Scalar GetInvalidValueForMat(Mat mat)
+        public static Scalar GetInvalidValueForMat(Mat mat)
         {
             MatType type = mat.Type();
             if (type == MatType.CV_8UC1 || type == MatType.CV_8UC3)
@@ -5210,7 +5137,7 @@
                 return new Scalar(0); // 瀵逛簬8浣嶆棤绗﹀彿绫诲瀷锛�0鏄畨鍏ㄧ殑鏃犳晥鍊�
         }
 
-        public void RGB2XYZ(double sR, double sG, double sB, out double X, out double Y, out double Z)
+        public static void RGB2XYZ(double sR, double sG, double sB, out double X, out double Y, out double Z)
         {
             // 杈撳叆鐨勯鑹插�� (sR, sG, sB) 搴斾负 0 鍒� 255 涔嬮棿鐨勫��
 
@@ -5241,7 +5168,7 @@
             Z = Math.Round(var_Z / (var_X + var_Y + var_Z), 3);
         }
 
-        public void ExtractFrames(string videoPath, string outputDir)
+        public static void ExtractFrames(string videoPath, string outputDir)
         {
             // 妫�鏌ヨ棰戞枃浠舵槸鍚﹀瓨鍦�
             if (!File.Exists(videoPath))
diff --git a/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithmEdit.cs b/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithmEdit.cs
index 70d13aa..b3701a6 100644
--- a/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithmEdit.cs
+++ b/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithmEdit.cs
@@ -53,36 +53,27 @@
             get
             {
                 if (Subject == null)
-                {
                     return null;
-                }
                 return Subject.InputImage;
             }
             set
             {
                 Subject.InputImage = value;
+
                 if (InputImage == null)
-                {
                     return;
-                }
 
                 if (InputImage is HObject)
-                {
                     inputImageHSmartWindowControl.ShowHoImage((HObject)value);
-                }
                 else if (InputImage is Bitmap)
                 {
-                    using (HImage image = TAlgorithm.Bitmap2HObject((Bitmap)value))
-                    {
-                        inputImageHSmartWindowControl.ShowHoImage(image);
-                    }
+                    TAlgorithm.Bitmap2HObject((Bitmap)value, out HObject image);
+                    inputImageHSmartWindowControl.ShowHoImage(image);
                 }
                 else if (InputImage is Mat)
                 {
-                    using (HImage image = TAlgorithm.Mat2HObject((Mat)value))
-                    {
-                        inputImageHSmartWindowControl.ShowHoImage(image);
-                    }
+                    TAlgorithm.Mat2HObject((Mat)value, out HObject image);
+                    inputImageHSmartWindowControl.ShowHoImage(image);
                 }
             }
         }
diff --git a/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TestTool/TestToolEdit.cs b/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TestTool/TestToolEdit.cs
index 5038929..a445945 100644
--- a/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TestTool/TestToolEdit.cs
+++ b/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TestTool/TestToolEdit.cs
@@ -179,17 +179,13 @@
                 {
                     if (Subject.OutputImage is Mat)
                     {
-                        using (HImage image = TAlgorithm.Mat2HObject((Mat)Subject.OutputImage))
-                        {
-                            recordImageHSmartWindowControl.ShowHoImage(image);
-                        }
+                        TAlgorithm.Mat2HObject((Mat)Subject.OutputImage, out HObject image);
+                        recordImageHSmartWindowControl.ShowHoImage(image);
                     }
                     else if (Subject.OutputImage is Bitmap)
                     {
-                        using (HImage image = TAlgorithm.Bitmap2HObject((Bitmap)Subject.OutputImage))
-                        {
-                            recordImageHSmartWindowControl.ShowHoImage(image);
-                        }
+                        TAlgorithm.Bitmap2HObject((Bitmap)Subject.OutputImage, out HObject image);
+                        recordImageHSmartWindowControl.ShowHoImage(image);
                     }
                     else if (Subject.OutputImage is HObject)
                     {
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobTool.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobTool.cs
index b63d02a..4999754 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobTool.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobTool.cs
@@ -89,15 +89,12 @@
                             BitmapData srcBmpData = ((Bitmap)InputImage).LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
                             hImage.GenImageInterleaved(srcBmpData.Scan0, "rgbx", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, "byte", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, 0, -1, 0);
                             ((Bitmap)InputImage).UnlockBits(srcBmpData);
-                            ((Bitmap)InputImage).Dispose();
+                            InputImage = null;
                             InputImage = hImage.Clone();
                         }
                     }
                     catch (Exception ex)
                     {
-                        Msg = "杞浘鍑洪敊锛�" + ex.Message;
-                        Result = false;
-                        return;
                     }
                 }
                 if (!(InputImage is HObject))
@@ -108,7 +105,7 @@
                 }
 
                 #region 瑁佸壀鍖哄煙
-                HImage DomainImage = null;
+                object DomainImage = null;
                 if (!ReduceDomainImage(InputImage, ref DomainImage))
                 {
                     Msg = "瑁佸壀鍖哄煙澶辫触";
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.Designer.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.Designer.cs
index 56533b2..80b4288 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.Designer.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.Designer.cs
@@ -1274,8 +1274,8 @@
             // 
             // HBlobToolEdit
             // 
-            AutoScaleDimensions = new SizeF(96F, 96F);
-            AutoScaleMode = AutoScaleMode.Dpi;
+            AutoScaleDimensions = new SizeF(7F, 17F);
+            AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(splitContainer1);
             Controls.Add(BtmStatusStrip);
             Controls.Add(TopToolStrip);
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dTool.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dTool.cs
index 879f915..fcf47ec 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dTool.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dTool.cs
@@ -2,7 +2,6 @@
 using System;
 using System.Collections.Generic;
 using System.Drawing;
-using System.Drawing.Imaging;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -64,27 +63,6 @@
                         Msg = "杈撳叆鍥剧墖涓虹┖";
                         Result = false;
                         return;
-                    }
-                    if (InputImage is Bitmap)
-                    {
-                        try
-                        {
-                            using (HImage hImage = new HImage())
-                            {
-                                Rectangle rect = new Rectangle(0, 0, ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height);
-                                BitmapData srcBmpData = ((Bitmap)InputImage).LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
-                                hImage.GenImageInterleaved(srcBmpData.Scan0, "rgbx", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, "byte", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, 0, -1, 0);
-                                ((Bitmap)InputImage).UnlockBits(srcBmpData);
-                                ((Bitmap)InputImage).Dispose();
-                                InputImage = hImage.Clone();
-                            }
-                        }
-                        catch (Exception ex)
-                        {
-                            Msg = "杞浘鍑洪敊锛�" + ex.Message;
-                            Result = false;
-                            return;
-                        }
                     }
                     if (!(InputImage is HObject))
                     {
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.Designer.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.Designer.cs
index 0cc9db9..b39a675 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.Designer.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.Designer.cs
@@ -584,8 +584,8 @@
             // 
             // HFindCode2dToolEdit
             // 
-            AutoScaleDimensions = new SizeF(96F, 96F);
-            AutoScaleMode = AutoScaleMode.Dpi;
+            AutoScaleDimensions = new SizeF(7F, 17F);
+            AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(MainTableLayoutPanel);
             Controls.Add(BtmStatusStrip);
             Controls.Add(TopToolStrip);
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.resx b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.resx
index 0960d33..7600563 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.resx
+++ b/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,13 +117,10 @@
   <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">
+  <metadata name="TopToolStrip.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>156, 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>148, 17</value>
   </metadata>
 </root>
\ No newline at end of file
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineTool.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineTool.cs
index 2ced791..533a89c 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineTool.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineTool.cs
@@ -3,7 +3,6 @@
 using LB_VisionProcesses.Alogrithms.Halcon;
 using System;
 using System.Collections.Generic;
-using System.Drawing.Imaging;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -62,33 +61,7 @@
                     Result = false;
                     return;
                 }
-                if (InputImage is Bitmap)
-                {
-                    try
-                    {
-                        using (HImage hImage = new HImage())
-                        {
-                            Rectangle rect = new Rectangle(0, 0, ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height);
-                            BitmapData srcBmpData = ((Bitmap)InputImage).LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
-                            hImage.GenImageInterleaved(srcBmpData.Scan0, "rgbx", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, "byte", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, 0, -1, 0);
-                            ((Bitmap)InputImage).UnlockBits(srcBmpData);
-                            ((Bitmap)InputImage).Dispose();
-                            InputImage = hImage.Clone();
-                        }
-                    }
-                    catch (Exception ex)
-                    {
-                        Msg = "杞浘鍑洪敊锛�" + ex.Message;
-                        Result = false;
-                        return;
-                    }
-                }
-                if (!(InputImage is HObject))
-                {
-                    Msg = "杈撳叆鍥剧墖鏍煎紡涓嶄负Mat";
-                    Result = false;
-                    return;
-                }
+
                 #region 瑁佸壀鍖哄煙
                 if (!(Params.ROI is HSegment))
                 {
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs
index b053403..7190e9e 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs
@@ -47,7 +47,6 @@
             label13 = new Label();
             cmbTransition = new ComboBox();
             cmbSelect = new ComboBox();
-            btnShowROI = new Button();
             pnlInputImage = new Panel();
             TopToolStrip = new ToolStrip();
             btnRun = new ToolStripButton();
@@ -86,6 +85,7 @@
             tabPageInputImage = new TabPage();
             tabPageRecordImage = new TabPage();
             pnlRecordImage = new Panel();
+            btnShowROI = new Button();
             tablePanelParas.SuspendLayout();
             TopToolStrip.SuspendLayout();
             BtmStatusStrip.SuspendLayout();
@@ -321,17 +321,6 @@
             cmbSelect.Name = "cmbSelect";
             cmbSelect.Size = new Size(103, 25);
             cmbSelect.TabIndex = 14;
-            // 
-            // 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;
             // 
             // pnlInputImage
             // 
@@ -765,10 +754,21 @@
             pnlRecordImage.Size = new Size(607, 510);
             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(96F, 96F);
-            AutoScaleMode = AutoScaleMode.Dpi;
+            AutoScaleDimensions = new SizeF(7F, 17F);
+            AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(MainTableLayoutPanel);
             Controls.Add(BtmStatusStrip);
             Controls.Add(TopToolStrip);
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.resx b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.resx
index 0960d33..551e0b0 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.resx
+++ b/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,13 +117,10 @@
   <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">
+  <metadata name="TopToolStrip.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>156, 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>129, 17</value>
   </metadata>
 </root>
\ No newline at end of file
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelTool.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelTool.cs
index 2bd95aa..4ca9695 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelTool.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelTool.cs
@@ -5,7 +5,6 @@
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Drawing.Imaging;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -93,27 +92,6 @@
                         Msg = "杈撳叆鍥剧墖涓虹┖";
                         Result = false;
                         return;
-                    }
-                    if (InputImage is Bitmap)
-                    {
-                        try
-                        {
-                            using (HImage hImage = new HImage())
-                            {
-                                Rectangle rect = new Rectangle(0, 0, ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height);
-                                BitmapData srcBmpData = ((Bitmap)InputImage).LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
-                                hImage.GenImageInterleaved(srcBmpData.Scan0, "rgbx", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, "byte", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, 0, -1, 0);
-                                ((Bitmap)InputImage).UnlockBits(srcBmpData);
-                                ((Bitmap)InputImage).Dispose();
-                                InputImage = hImage.Clone();
-                            }
-                        }
-                        catch (Exception ex)
-                        {
-                            Msg = "杞浘鍑洪敊锛�" + ex.Message;
-                            Result = false;
-                            return;
-                        }
                     }
                     if (!(InputImage is HObject))
                     {
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.Designer.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.Designer.cs
index 887e0e9..317d5e8 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.Designer.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.Designer.cs
@@ -1685,8 +1685,8 @@
             // 
             // HFindModelToolEdit
             // 
-            AutoScaleDimensions = new SizeF(96F, 96F);
-            AutoScaleMode = AutoScaleMode.Dpi;
+            AutoScaleDimensions = new SizeF(7F, 17F);
+            AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(MainTableLayoutPanel);
             Controls.Add(BtmStatusStrip);
             Controls.Add(TopToolStrip);
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.resx b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.resx
index 0960d33..1526ea6 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.resx
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.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
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelTool.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelTool.cs
index 1ca8acb..ee6b699 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelTool.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelTool.cs
@@ -5,7 +5,6 @@
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Drawing.Imaging;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -88,27 +87,6 @@
                         Msg = "杈撳叆鍥剧墖涓虹┖";
                         Result = false;
                         return;
-                    }
-                    if (InputImage is Bitmap)
-                    {
-                        try
-                        {
-                            using (HImage hImage = new HImage())
-                            {
-                                Rectangle rect = new Rectangle(0, 0, ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height);
-                                BitmapData srcBmpData = ((Bitmap)InputImage).LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
-                                hImage.GenImageInterleaved(srcBmpData.Scan0, "rgbx", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, "byte", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, 0, -1, 0);
-                                ((Bitmap)InputImage).UnlockBits(srcBmpData);
-                                ((Bitmap)InputImage).Dispose();
-                                InputImage = hImage.Clone();
-                            }
-                        }
-                        catch (Exception ex)
-                        {
-                            Msg = "杞浘鍑洪敊锛�"+ ex.Message;
-                            Result = false;
-                            return;
-                        }
                     }
                     if (!(InputImage is HObject))
                     {
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.Designer.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.Designer.cs
index bd86779..4eb6686 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.Designer.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.Designer.cs
@@ -197,7 +197,7 @@
             tabPage1.Controls.Add(splitContainer1);
             tabPage1.Location = new Point(4, 26);
             tabPage1.Name = "tabPage1";
-            tabPage1.Padding = new Padding(3);
+            tabPage1.Padding = new Padding(3, 3, 3, 3);
             tabPage1.Size = new Size(403, 516);
             tabPage1.TabIndex = 0;
             tabPage1.Text = "杈撳叆鍙傛暟";
@@ -422,8 +422,8 @@
             tabPage2.Controls.Add(tableLayoutResults);
             tabPage2.Location = new Point(4, 26);
             tabPage2.Name = "tabPage2";
-            tabPage2.Padding = new Padding(3);
-            tabPage2.Size = new Size(403, 516);
+            tabPage2.Padding = new Padding(3, 3, 3, 3);
+            tabPage2.Size = new Size(404, 519);
             tabPage2.TabIndex = 1;
             tabPage2.Text = "杈撳嚭缁撴灉";
             tabPage2.UseVisualStyleBackColor = true;
@@ -458,7 +458,7 @@
             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(398, 513);
             tableLayoutResults.TabIndex = 1;
             // 
             // label5
@@ -510,7 +510,7 @@
             dtxtCenterX.Margin = new Padding(2, 3, 2, 3);
             dtxtCenterX.Name = "dtxtCenterX";
             dtxtCenterX.ReadOnly = true;
-            dtxtCenterX.Size = new Size(293, 23);
+            dtxtCenterX.Size = new Size(294, 23);
             dtxtCenterX.TabIndex = 5;
             // 
             // dtxtCenterY
@@ -520,7 +520,7 @@
             dtxtCenterY.Margin = new Padding(2, 3, 2, 3);
             dtxtCenterY.Name = "dtxtCenterY";
             dtxtCenterY.ReadOnly = true;
-            dtxtCenterY.Size = new Size(293, 23);
+            dtxtCenterY.Size = new Size(294, 23);
             dtxtCenterY.TabIndex = 6;
             // 
             // dtxtAngle
@@ -530,7 +530,7 @@
             dtxtAngle.Margin = new Padding(2, 3, 2, 3);
             dtxtAngle.Name = "dtxtAngle";
             dtxtAngle.ReadOnly = true;
-            dtxtAngle.Size = new Size(293, 23);
+            dtxtAngle.Size = new Size(294, 23);
             dtxtAngle.TabIndex = 7;
             // 
             // label8
@@ -550,7 +550,7 @@
             dtxtScore.Location = new Point(103, 156);
             dtxtScore.Name = "dtxtScore";
             dtxtScore.ReadOnly = true;
-            dtxtScore.Size = new Size(291, 23);
+            dtxtScore.Size = new Size(292, 23);
             dtxtScore.TabIndex = 9;
             // 
             // dtxtCount
@@ -588,7 +588,7 @@
             tabPageInputImage.Controls.Add(pnlInputImage);
             tabPageInputImage.Location = new Point(4, 26);
             tabPageInputImage.Name = "tabPageInputImage";
-            tabPageInputImage.Padding = new Padding(3);
+            tabPageInputImage.Padding = new Padding(3, 3, 3, 3);
             tabPageInputImage.Size = new Size(613, 516);
             tabPageInputImage.TabIndex = 0;
             tabPageInputImage.Text = "杈撳叆鍥惧儚";
@@ -598,7 +598,7 @@
             // 
             pnlInputImage.Dock = DockStyle.Fill;
             pnlInputImage.Location = new Point(3, 3);
-            pnlInputImage.Margin = new Padding(4);
+            pnlInputImage.Margin = new Padding(4, 4, 4, 4);
             pnlInputImage.Name = "pnlInputImage";
             pnlInputImage.Size = new Size(607, 510);
             pnlInputImage.TabIndex = 44;
@@ -608,8 +608,8 @@
             tabPageRecordImage.Controls.Add(pnlRecordImage);
             tabPageRecordImage.Location = new Point(4, 26);
             tabPageRecordImage.Name = "tabPageRecordImage";
-            tabPageRecordImage.Padding = new Padding(3);
-            tabPageRecordImage.Size = new Size(613, 516);
+            tabPageRecordImage.Padding = new Padding(3, 3, 3, 3);
+            tabPageRecordImage.Size = new Size(613, 519);
             tabPageRecordImage.TabIndex = 1;
             tabPageRecordImage.Text = "缁撴灉鍥惧儚";
             tabPageRecordImage.UseVisualStyleBackColor = true;
@@ -618,15 +618,15 @@
             // 
             pnlRecordImage.Dock = DockStyle.Fill;
             pnlRecordImage.Location = new Point(3, 3);
-            pnlRecordImage.Margin = new Padding(4);
+            pnlRecordImage.Margin = new Padding(4, 4, 4, 4);
             pnlRecordImage.Name = "pnlRecordImage";
-            pnlRecordImage.Size = new Size(607, 510);
+            pnlRecordImage.Size = new Size(607, 513);
             pnlRecordImage.TabIndex = 45;
             // 
             // HFindMultiModelToolEdit
             // 
-            AutoScaleDimensions = new SizeF(96F, 96F);
-            AutoScaleMode = AutoScaleMode.Dpi;
+            AutoScaleDimensions = new SizeF(7F, 17F);
+            AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(MainTableLayoutPanel);
             Controls.Add(BtmStatusStrip);
             Controls.Add(TopToolStrip);
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.resx b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.resx
index 1e6b716..ebc4d95 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.resx
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.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
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HMulitModelControl.Designer.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HMulitModelControl.Designer.cs
index ed55867..edf8273 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HMulitModelControl.Designer.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HMulitModelControl.Designer.cs
@@ -167,8 +167,8 @@
             // 
             // HMulitModelControl
             // 
-            AutoScaleDimensions = new SizeF(96F, 96F);
-            AutoScaleMode = AutoScaleMode.Dpi;
+            AutoScaleDimensions = new SizeF(7F, 17F);
+            AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(tableLayoutPanel1);
             Name = "HMulitModelControl";
             Size = new Size(399, 157);
diff --git a/LB_VisionProcesses/Alogrithms/OpenCvSharp/BlobTool/BlobToolEdit.cs b/LB_VisionProcesses/Alogrithms/OpenCvSharp/BlobTool/BlobToolEdit.cs
index cfe7641..5395562 100644
--- a/LB_VisionProcesses/Alogrithms/OpenCvSharp/BlobTool/BlobToolEdit.cs
+++ b/LB_VisionProcesses/Alogrithms/OpenCvSharp/BlobTool/BlobToolEdit.cs
@@ -120,11 +120,10 @@
 
                 if (Subject.InputImage != null && Subject.InputImage is Mat)
                 {
-                    using (HImage image = TAlgorithm.Mat2HObject((Mat)Subject.InputImage))
-                    {
-                        inputImageHSmartWindowControl.ShowHoImage(image);
-                    }
+                    TAlgorithm.Mat2HObject((Mat)Subject.InputImage, out HObject image);
+                    inputImageHSmartWindowControl.ShowHoImage(image);
                 }
+
                 Type type = Subject.Params.ROI?.GetType();
                 if (Subject.Params.ROI != null)
                 {
@@ -216,11 +215,9 @@
 
                 if (Subject.InputImage != null && Subject.InputImage is Mat)
                 {
-                    using (HImage image = TAlgorithm.Mat2HObject((Mat)Subject.InputImage))
-                    {
-                        HOperatorSet.GetImageSize(image, out HTuple ho_ImageWidth, out HTuple ho_ImageHeight);
-                        recordImageHSmartWindowControl.ShowHoImage(image);
-                    }
+                    TAlgorithm.Mat2HObject((Mat)Subject.InputImage, out HObject image);
+                    HOperatorSet.GetImageSize(image, out HTuple ho_ImageWidth, out HTuple ho_ImageHeight);
+                    recordImageHSmartWindowControl.ShowHoImage(image);
                 }
 
                 //鍏堝垽鏂瓙绫诲啀鍒ゆ柇鐖剁被
@@ -228,11 +225,10 @@
                 {
                     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)
                 {
@@ -306,34 +302,32 @@
                     HTuple hv_imageHeight = 0;
                     if (InputImage != null && InputImage is Mat)
                     {
-                        using (HImage image = TAlgorithm.Mat2HObject((Mat)InputImage))
-                        {
-                            image.GetImageSize(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.Ellipse:
-                                //    inputImageHSmartWindowControl.oRoi
-                                //        = new HEllipse(hv_imageWidth.TupleReal() / 2, hv_imageHeight.TupleReal() / 2,0, hv_imageHeight.TupleReal() / 4, 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;
-                            }
-                        }
+                        TAlgorithm.Mat2HObject((Mat)InputImage, out HObject image);
+                        HOperatorSet.GetImageSize(image, 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.Ellipse:
+                        //    inputImageHSmartWindowControl.oRoi
+                        //        = new HEllipse(hv_imageWidth.TupleReal() / 2, hv_imageHeight.TupleReal() / 2,0, hv_imageHeight.TupleReal() / 4, 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;
                     }
                 }
             }
diff --git a/LB_VisionProcesses/Alogrithms/OpenCvSharp/FindLineTool/FindLineToolEdit.cs b/LB_VisionProcesses/Alogrithms/OpenCvSharp/FindLineTool/FindLineToolEdit.cs
index d84fcbd..bcfa800 100644
--- a/LB_VisionProcesses/Alogrithms/OpenCvSharp/FindLineTool/FindLineToolEdit.cs
+++ b/LB_VisionProcesses/Alogrithms/OpenCvSharp/FindLineTool/FindLineToolEdit.cs
@@ -144,62 +144,61 @@
 
                 if (Subject.InputImage != null && Subject.InputImage is Mat)
                 {
-                    using (HImage image = TAlgorithm.Mat2HObject((Mat)Subject.InputImage))
+                    TAlgorithm.Mat2HObject((Mat)Subject.InputImage, out HObject image);
+                    inputImageHSmartWindowControl.ShowHoImage(image);
+                }
+
+                Type type = Subject.Params.ROI?.GetType();
+                if (Subject.Params.ROI != null)
+                {
+                    switch (type)
                     {
-                        inputImageHSmartWindowControl.ShowHoImage(image);
-                        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;
-                        }
+                        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;
                 }
             }));
         }
@@ -259,27 +258,27 @@
 
                 if (Subject.InputImage != null && Subject.InputImage is Mat)
                 {
-                    using (HImage image = TAlgorithm.Mat2HObject((Mat)Subject.InputImage))
-                    {
-                        image.GetImageSize(out HTuple ho_ImageWidth, out HTuple ho_ImageHeight);
-                        recordImageHSmartWindowControl.ShowHoImage(image);
-                        //鍏堝垽鏂瓙绫诲啀鍒ゆ柇鐖剁被
-                        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);
-                        }
-                    }
+                    TAlgorithm.Mat2HObject((Mat)Subject.InputImage, out HObject image);
+                    HOperatorSet.GetImageSize(image, out HTuple ho_ImageWidth, out HTuple ho_ImageHeight);
+                    recordImageHSmartWindowControl.ShowHoImage(image);
                 }
+
+                //鍏堝垽鏂瓙绫诲啀鍒ゆ柇鐖剁被
+                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();
             }));
         }
@@ -346,30 +345,28 @@
                     HTuple hv_imageHeight = 0;
                     if (InputImage != null && InputImage is Mat)
                     {
-                        using (HImage image=TAlgorithm.Mat2HObject((Mat)InputImage))
-                        {
-                            image.GetImageSize(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;
-                            }
-                        }
+                        TAlgorithm.Mat2HObject((Mat)InputImage, out HObject image);
+                        HOperatorSet.GetImageSize(image, 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;
                     }
                 }
             }
@@ -400,26 +397,25 @@
 
                     if (InputImage != null && InputImage is Mat)
                     {
-                        using (HImage image = TAlgorithm.Mat2HObject((Mat)InputImage))
-                        {
-                            inputImageHSmartWindowControl.ShowHoImage(image);
-                            int hv_Elements = Convert.ToInt16(itxtCaliperCount.Text);
-                            double hv_DetectHeight = Convert.ToDouble(dtxtCaliperHeight.Text);
-                            double hv_DetectWidth = Convert.ToDouble(dtxtCaliperWidth.Text);
-
-                            double hv_Row1 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).BeginRow + Subject.Params.Fixture.Row);
-                            double hv_Column1 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).BeginColumn + Subject.Params.Fixture.Column);
-                            double hv_Row2 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).EndRow + Subject.Params.Fixture.Row);
-                            double hv_Column2 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).EndColumn + Subject.Params.Fixture.Column);
-
-                            TAlgorithm.GetRakeRegions(null, out HObject ho_Regions, hv_Elements, hv_DetectHeight, hv_DetectWidth
-                                , new HTuple(), new HTuple(), new HTuple(), new HTuple()
-                                , hv_Row1, hv_Column1, hv_Row2, hv_Column2
-                                , out HTuple hv_ResultRow, out HTuple hv_ResultColumn);
-
-                            inputImageHSmartWindowControl.DispObj(ho_Regions);
-                        }
+                        TAlgorithm.Mat2HObject((Mat)InputImage, out HObject image);
+                        inputImageHSmartWindowControl.ShowHoImage(image);
                     }
+
+                    int hv_Elements = Convert.ToInt16(itxtCaliperCount.Text);
+                    double hv_DetectHeight = Convert.ToDouble(dtxtCaliperHeight.Text);
+                    double hv_DetectWidth = Convert.ToDouble(dtxtCaliperWidth.Text);
+
+                    double hv_Row1 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).BeginRow + Subject.Params.Fixture.Row);
+                    double hv_Column1 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).BeginColumn + Subject.Params.Fixture.Column);
+                    double hv_Row2 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).EndRow + Subject.Params.Fixture.Row);
+                    double hv_Column2 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).EndColumn + Subject.Params.Fixture.Column);
+
+                    TAlgorithm.GetRakeRegions(null, out HObject ho_Regions, hv_Elements, hv_DetectHeight, hv_DetectWidth
+                        , new HTuple(), new HTuple(), new HTuple(), new HTuple()
+                        , hv_Row1, hv_Column1, hv_Row2, hv_Column2
+                        , out HTuple hv_ResultRow, out HTuple hv_ResultColumn);
+
+                    inputImageHSmartWindowControl.DispObj(ho_Regions);
                 }
                 catch { }
             }));
diff --git a/LB_VisionProcesses/Alogrithms/OpenCvSharp/FindModelTool/FindModelToolEdit.cs b/LB_VisionProcesses/Alogrithms/OpenCvSharp/FindModelTool/FindModelToolEdit.cs
index 5e2e2df..392ee61 100644
--- a/LB_VisionProcesses/Alogrithms/OpenCvSharp/FindModelTool/FindModelToolEdit.cs
+++ b/LB_VisionProcesses/Alogrithms/OpenCvSharp/FindModelTool/FindModelToolEdit.cs
@@ -241,66 +241,64 @@
 
                 if (Subject.InputImage != null && Subject.InputImage is Mat)
                 {
-                    using (HImage image = TAlgorithm.Mat2HObject((Mat)Subject.InputImage))
-                    {
-                        inputImageHSmartWindowControl.ShowHoImage(image);
-                        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;
-                        }
-
-                        ShowModel(((FindModelTool)Subject).ModelID);
-
-                    }
+                    TAlgorithm.Mat2HObject((Mat)Subject.InputImage, out HObject image);
+                    inputImageHSmartWindowControl.ShowHoImage(image);
                 }
+
+                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;
+                }
+
+                ShowModel(((FindModelTool)Subject).ModelID);
             }));
         }
 
@@ -359,27 +357,25 @@
 
                 if (Subject.InputImage != null && Subject.InputImage is Mat)
                 {
-                    using (HImage image = TAlgorithm.Mat2HObject((Mat)Subject.InputImage))
-                    {
-                        image.GetImageSize(out HTuple ho_ImageWidth, out HTuple ho_ImageHeight);
-                        recordImageHSmartWindowControl.ShowHoImage(image);
-                        //鍏堝垽鏂瓙绫诲啀鍒ゆ柇鐖剁被
-                        if (Subject.Record != null && Subject.Record is MsgRecord msgRecord)
-                        {
-                            recordImageHSmartWindowControl.DispObj(msgRecord.RecordObject_OK, true);
-                            recordImageHSmartWindowControl.DispObj(msgRecord.RecordObject_NG, false);
+                    TAlgorithm.Mat2HObject((Mat)Subject.InputImage, out HObject image);
+                    HOperatorSet.GetImageSize(image, out HTuple ho_ImageWidth, out HTuple ho_ImageHeight);
+                    recordImageHSmartWindowControl.ShowHoImage(image);
+                }
 
-                            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);
-                        }
+                //鍏堝垽鏂瓙绫诲啀鍒ゆ柇鐖剁被
+                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();
@@ -502,30 +498,28 @@
                     HTuple hv_imageHeight = 0;
                     if (InputImage != null && InputImage is Mat)
                     {
-                        using (HImage image = TAlgorithm.Mat2HObject((Mat)InputImage))
-                        {
-                            HOperatorSet.GetImageSize(image, 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;
-                            }
-                        }
+                        TAlgorithm.Mat2HObject((Mat)InputImage, out HObject image);
+                        HOperatorSet.GetImageSize(image, 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;
                     }
                 }
             }
@@ -1102,14 +1096,13 @@
             if (InputImage != null && InputImage is Mat)
             {
                 imgTabControl.SelectedTab = tabPageModelImage;
-                using (HImage hoDomainImage = TAlgorithm.Mat2HObject((Mat)InputImage))
-                {
-                    HOperatorSet.GetImageSize(hoDomainImage, out HTuple hv_imageWidth, out HTuple hv_imageHeight);
-                    createModelImageHSmartWindowControl.ShowHoImage((HObject)hoDomainImage);
-                    createModelImageHSmartWindowControl.bAollowDraw = true;
-                    createModelImageHSmartWindowControl.oRoi = new HRectangle2(hv_imageWidth.TupleReal() / 2, hv_imageHeight.TupleReal() / 2
-                        , 0, hv_imageWidth.TupleReal() / 4, hv_imageHeight.TupleReal() / 4);
-                }
+                TAlgorithm.Mat2HObject((Mat)InputImage, out HObject hoDomainImage);
+
+                HOperatorSet.GetImageSize(hoDomainImage, out HTuple hv_imageWidth, out HTuple hv_imageHeight);
+                createModelImageHSmartWindowControl.ShowHoImage((HObject)hoDomainImage);
+                createModelImageHSmartWindowControl.bAollowDraw = true;
+                createModelImageHSmartWindowControl.oRoi = new HRectangle2(hv_imageWidth.TupleReal() / 2, hv_imageHeight.TupleReal() / 2
+                    , 0, hv_imageWidth.TupleReal() / 4, hv_imageHeight.TupleReal() / 4);
             }
         }
 
@@ -1120,6 +1113,7 @@
                 if (InputImage != null && InputImage is Mat)
                 {
                     double result = 0;
+
                     if (Enum.TryParse(cmbModelType.Text, out ModelType modelType))
                     {
                         string NumLevels = this.dtxtModelParam1.Text;
@@ -1137,83 +1131,75 @@
                         string Contrast = this.dtxtModelParam11.Text;
                         int MinContrast = Convert.ToInt16(this.dtxtModelParam12.Text);
                         HRectangle2 ROI = (HRectangle2)createModelImageHSmartWindowControl.oRoi;
-                        using (HRegion hRectangle = new HRegion())
+
+                        HOperatorSet.GenRectangle2(out HObject hRectangle, ROI.Row, ROI.Column, ROI.Phi, ROI.SemiLength1, ROI.SemiLength2);
+                        TAlgorithm.Mat2HObject((Mat)InputImage, out HObject hoDomainImage);
+                        HTuple hv_Channels = new HTuple();
+                        //鍒ゆ柇鏄惁涓虹伆搴﹀浘
+                        using (HDevDisposeHelper dh = new HDevDisposeHelper())
                         {
-                            hRectangle.GenRectangle2(ROI.Row, ROI.Column, ROI.Phi, ROI.SemiLength1, ROI.SemiLength2);
-                            using (HImage hoDomainImage = TAlgorithm.Mat2HObject((Mat)InputImage))
+                            try
                             {
-                                HTuple hv_Channels = new HTuple();
-                                //鍒ゆ柇鏄惁涓虹伆搴﹀浘
-                                using (HDevDisposeHelper dh = new HDevDisposeHelper())
-                                {
-                                    try
-                                    {
-                                        //hv_Channels = hoDomainImage.CountChannels();
-                                        //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);
 
-                                        ////杞崲鍚庡啀娆℃鏌ユ槸鍚︿负鐏板害鍥�
-                                        //HOperatorSet.CountChannels(hoDomainImage, out hv_Channels);
-                                        //if (hv_Channels.TupleInt() != 1)
-                                        //    HOperatorSet.Rgb1ToGray(hoDomainImage, out hoDomainImage);
-                                    }
-                                    catch { }
-                                }
-                                HObject hoImageReduced = hoDomainImage.Rgb1ToGray().ReduceDomain(hRectangle);
-                                HOperatorSet.CropDomain(hoImageReduced, out hoImageReduced);
-                                TAlgorithm.HObject2Mat(hoImageReduced, out Mat hoModelImage);
-                                bool bCreateModel = false;
-
-                                switch (modelType)
-                                {
-                                    case ModelType.鐏板害鍖归厤:
-                                        bCreateModel = ((FindModelTool)Subject).CreateModel
-                                            (hoModelImage, modelType, NumLevels
-                                            , AngleStart, AngleExtent, AngleStep
-                                            , ScaleRMin, ScaleRMax, "auto"
-                                            , ScaleCMin, ScaleCMax, "auto"
-                                            , Optimization, Metric, Contrast, MinContrast);
-                                        break;
-                                    default:
-                                        bCreateModel = ((FindModelTool)Subject).CreateModel
-                                            (hoModelImage, modelType, NumLevels
-                                            , AngleStart, AngleExtent, AngleStep
-                                            , ScaleRMin, ScaleRMax, "auto"
-                                            , ScaleCMin, ScaleCMax, "auto"
-                                            , Optimization, Metric, Contrast, MinContrast);
-                                        break;
-                                }
-
-                                if (bCreateModel)
-                                {
-                                    using (HObject ho_ModelContours = new HObject())
-                                    {
-                                        //switch (((FindModelTool)Subject).ModelID.Type)
-                                        //{
-                                        //    case ModelType.灞�閮ㄥ彉褰㈡ā鏉�:
-                                        //        HOperatorSet.GetDeformableModelContours(out ho_ModelContours, ((HFindModelTool)Subject).ModelID.hvModel, 1);
-                                        //        break;
-                                        //    case ModelType.鍚勫悜寮傚舰妯℃澘:
-                                        //    default:
-                                        //        HOperatorSet.GetShapeModelContours(out ho_ModelContours, ((HFindModelTool)Subject).ModelID.hvModel, 1);
-                                        //        break;
-                                        //}
-                                        //HOperatorSet.GetImageSize(((HFindModelTool)Subject).ModelID.hoImage, out HTuple hv_Width, out HTuple hv_Height);
-                                        //HOperatorSet.VectorAngleToRigid(-hv_Height / 2, -hv_Width / 2, 0, 0, 0, 0, out HTuple hv_HomMat2D);
-                                        //HOperatorSet.AffineTransContourXld(ho_ModelContours, out ho_ModelContours, hv_HomMat2D);
-
-                                        //寤烘ā鎴愬姛瀵艰埅鍒板瓙椤�
-                                        parasTabControl.SelectedTab = tabPageRunParas;
-                                        //modelImageHSmartWindowControl.ShowHoImage(((HFindModelTool)Subject).ModelID.hoImage);
-                                        using (HImage modelImage = TAlgorithm.Mat2HObject(((FindModelTool)Subject).ModelID.hoImage))
-                                        {
-                                            modelImageHSmartWindowControl.ShowHoImage(modelImage);
-                                            modelImageHSmartWindowControl.DispObj(ho_ModelContours, false);
-                                            modelImageHSmartWindowControl.ShowMsg("鍒涘缓妯℃澘鎴愬姛", true);
-                                        }
-                                    }
-                                }
+                                //杞崲鍚庡啀娆℃鏌ユ槸鍚︿负鐏板害鍥�
+                                HOperatorSet.CountChannels(hoDomainImage, out hv_Channels);
+                                if (hv_Channels.TupleInt() != 1)
+                                    HOperatorSet.Rgb1ToGray(hoDomainImage, out hoDomainImage);
                             }
+                            catch { }
+                        }
+                        HOperatorSet.ReduceDomain(hoDomainImage, hRectangle, out HObject hoImageReduced);
+                        HOperatorSet.CropDomain(hoImageReduced, out hoImageReduced);
+                        TAlgorithm.HObject2Mat(hoImageReduced, out Mat hoModelImage);
+                        bool bCreateModel = false;
+
+                        switch (modelType)
+                        {
+                            case ModelType.鐏板害鍖归厤:
+                                bCreateModel = ((FindModelTool)Subject).CreateModel
+                                    (hoModelImage, modelType, NumLevels
+                                    , AngleStart, AngleExtent, AngleStep
+                                    , ScaleRMin, ScaleRMax, "auto"
+                                    , ScaleCMin, ScaleCMax, "auto"
+                                    , Optimization, Metric, Contrast, MinContrast);
+                                break;
+                            default:
+                                bCreateModel = ((FindModelTool)Subject).CreateModel
+                                    (hoModelImage, modelType, NumLevels
+                                    , AngleStart, AngleExtent, AngleStep
+                                    , ScaleRMin, ScaleRMax, "auto"
+                                    , ScaleCMin, ScaleCMax, "auto"
+                                    , Optimization, Metric, Contrast, MinContrast);
+                                break;
+                        }
+
+                        if (bCreateModel)
+                        {
+                            HObject ho_ModelContours = new HObject();
+                            //switch (((FindModelTool)Subject).ModelID.Type)
+                            //{
+                            //    case ModelType.灞�閮ㄥ彉褰㈡ā鏉�:
+                            //        HOperatorSet.GetDeformableModelContours(out ho_ModelContours, ((HFindModelTool)Subject).ModelID.hvModel, 1);
+                            //        break;
+                            //    case ModelType.鍚勫悜寮傚舰妯℃澘:
+                            //    default:
+                            //        HOperatorSet.GetShapeModelContours(out ho_ModelContours, ((HFindModelTool)Subject).ModelID.hvModel, 1);
+                            //        break;
+                            //}
+                            //HOperatorSet.GetImageSize(((HFindModelTool)Subject).ModelID.hoImage, out HTuple hv_Width, out HTuple hv_Height);
+                            //HOperatorSet.VectorAngleToRigid(-hv_Height / 2, -hv_Width / 2, 0, 0, 0, 0, out HTuple hv_HomMat2D);
+                            //HOperatorSet.AffineTransContourXld(ho_ModelContours, out ho_ModelContours, hv_HomMat2D);
+
+                            //寤烘ā鎴愬姛瀵艰埅鍒板瓙椤�
+                            parasTabControl.SelectedTab = tabPageRunParas;
+                            //modelImageHSmartWindowControl.ShowHoImage(((HFindModelTool)Subject).ModelID.hoImage);
+                            TAlgorithm.Mat2HObject(((FindModelTool)Subject).ModelID.hoImage, out HObject modelImage);
+                            modelImageHSmartWindowControl.ShowHoImage(modelImage);
+                            modelImageHSmartWindowControl.DispObj(ho_ModelContours, false);
+                            modelImageHSmartWindowControl.ShowMsg("鍒涘缓妯℃澘鎴愬姛", true);
                         }
                     }
                 }
@@ -1229,32 +1215,27 @@
 
                 if (ModelID != null && ModelID.Width > 0)
                 {
-                    //HOperatorSet.GenEmptyObj(out HObject ho_ModelContours);
-                    using (HRegion ho_ModelContours = new HRegion())
-                    {
-                        //switch (ModelID.Type)
-                        //{
-                        //    case ModelType.鍚勫悜寮傚舰妯℃澘:
-                        //        HOperatorSet.GetDeformableModelContours(out ho_ModelContours, ModelID.hvModel, 1);
-                        //        break;
-                        //    default:
-                        //        HOperatorSet.GetShapeModelContours(out ho_ModelContours, ModelID.hvModel, 1);
-                        //        break;
-                        //}
+                    HOperatorSet.GenEmptyObj(out HObject ho_ModelContours);
+                    //switch (ModelID.Type)
+                    //{
+                    //    case ModelType.鍚勫悜寮傚舰妯℃澘:
+                    //        HOperatorSet.GetDeformableModelContours(out ho_ModelContours, ModelID.hvModel, 1);
+                    //        break;
+                    //    default:
+                    //        HOperatorSet.GetShapeModelContours(out ho_ModelContours, ModelID.hvModel, 1);
+                    //        break;
+                    //}
 
-                        //HOperatorSet.GetImageSize(ModelID.hoImage, out HTuple hv_Width, out HTuple hv_Height);
-                        //HOperatorSet.VectorAngleToRigid(-hv_Height / 2, -hv_Width / 2, 0, 0, 0, 0, out HTuple hv_HomMat2D);
-                        //HOperatorSet.AffineTransContourXld(ho_ModelContours, out ho_ModelContours, hv_HomMat2D);
+                    //HOperatorSet.GetImageSize(ModelID.hoImage, out HTuple hv_Width, out HTuple hv_Height);
+                    //HOperatorSet.VectorAngleToRigid(-hv_Height / 2, -hv_Width / 2, 0, 0, 0, 0, out HTuple hv_HomMat2D);
+                    //HOperatorSet.AffineTransContourXld(ho_ModelContours, out ho_ModelContours, hv_HomMat2D);
 
-                        modelImageHSmartWindowControl.ClearObj();
-                        using (HImage hoImage = TAlgorithm.Mat2HObject(ModelID.hoImage))
-                        {
-                            //modelImageHSmartWindowControl.ShowHoImage(ModelID.hoImage);
-                            modelImageHSmartWindowControl.ShowHoImage(hoImage);
-                            modelImageHSmartWindowControl.DispObj(ho_ModelContours, false);
-                            modelImageHSmartWindowControl.ShowMsg("鍒涘缓妯℃澘鎴愬姛", true);
-                        }
-                    }
+                    modelImageHSmartWindowControl.ClearObj();
+                    TAlgorithm.Mat2HObject(ModelID.hoImage, out HObject hoImage);
+                    //modelImageHSmartWindowControl.ShowHoImage(ModelID.hoImage);
+                    modelImageHSmartWindowControl.ShowHoImage(hoImage);
+                    modelImageHSmartWindowControl.DispObj(ho_ModelContours, false);
+                    modelImageHSmartWindowControl.ShowMsg("鍒涘缓妯℃澘鎴愬姛", true);
                 }
             }
             catch { }
diff --git a/LB_VisionProcesses/IProcess.cs b/LB_VisionProcesses/IProcess.cs
index 0064440..accc788 100644
--- a/LB_VisionProcesses/IProcess.cs
+++ b/LB_VisionProcesses/IProcess.cs
@@ -155,12 +155,12 @@
         /// <summary>
         /// 杈撳叆鍥剧墖
         /// </summary>
-        public object InputImage;
+        public object InputImage = null;
 
         /// <summary>
         /// 杈撳嚭鍥剧墖
         /// </summary>
-        public object OutputImage;
+        public object OutputImage = null;
 
         /// <summary>
         /// 缁撴灉鍖哄煙
diff --git a/LB_VisionProcesses/Processes/BaseProcess.cs b/LB_VisionProcesses/Processes/BaseProcess.cs
index c6032c5..379f2d6 100644
--- a/LB_VisionProcesses/Processes/BaseProcess.cs
+++ b/LB_VisionProcesses/Processes/BaseProcess.cs
@@ -21,8 +21,8 @@
             DateTime StartTime = DateTime.Now;
 
             InitRunParams();
-            HOperatorSet.GenEmptyObj(out HObject EmptyObj);
-            OutputImage = EmptyObj;
+            //HOperatorSet.GenEmptyObj(out HObject EmptyObj);
+            //OutputImage = EmptyObj;
 
             #region 杩愯閫昏緫
 

--
Gitblit v1.9.3