From 1d3785b9df79b7eebe31f6b32f8781c766808136 Mon Sep 17 00:00:00 2001
From: C3204 <zhengyabo@lanpucloud.cn>
Date: 星期五, 26 十二月 2025 13:05:52 +0800
Subject: [PATCH] ”修复DPI变化导致显示异常问题。“

---
 LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs |  286 ++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 180 insertions(+), 106 deletions(-)

diff --git a/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs b/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs
index 0c95831..919f3bd 100644
--- a/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs
+++ b/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs
@@ -64,7 +64,7 @@
                 {
                     if (InputImage is Bitmap)
                     {
-                        TAlgorithm.Bitmap2Mat((Bitmap)InputImage, out Mat src);
+                        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(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+                                ((Mat)image).SetTo(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(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+                                ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
 
                                 // 3. 鍒涘缓鍦嗗舰閬僵
                                 using (Mat mask = Mat.Zeros(src.Rows, src.Cols, MatType.CV_8UC1))
@@ -127,39 +127,8 @@
                                 image = ((Bitmap)InputImage)?.Clone();
                                 return true;
                         }
-                        TAlgorithm.Mat2Bitmap((Mat)image, out Bitmap bmp);
+                        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)
@@ -193,7 +162,7 @@
 
                                 // 4. 鍒涘缓涓庡師鍥惧ぇ灏忕浉鍚岀殑Mat锛屽苟鍒濆鍖栨棤鏁堝��
                                 image = new Mat(src.Size(), src.Type());
-                                ((Mat)image).SetTo(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+                                ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
 
                                 // 5. 鍒涘缓閬僵锛氬湪result涓婄粯鍒舵棆杞煩褰紙鐧借壊濉厖锛�
                                 using (Mat cropped = new Mat(src, boundingRect))
@@ -210,7 +179,7 @@
 
                                 // 2. 鍒涘缓涓庡師鍥惧ぇ灏忕浉鍚岀殑Mat锛屽苟鍒濆鍖栨棤鏁堝��
                                 image = new Mat(src.Size(), src.Type());
-                                ((Mat)image).SetTo(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+                                ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
 
                                 // 3. 鍒涘缓鍦嗗舰閬僵
                                 using (Mat mask = Mat.Zeros(src.Rows, src.Cols, MatType.CV_8UC1))
@@ -244,32 +213,112 @@
             }
         }
 
+        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();
@@ -287,13 +336,18 @@
                 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(); }
@@ -303,17 +357,32 @@
         {
             Result = true;
             bCompleted = false;
-            Msg = "";
-            OutputImage = null;
-
+            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;
+            //}
             if (Record != null)
+            {
                 Record.Dispose();
+            }
         }
 
         public override bool Run()
         {
             DateTime StartTime = DateTime.Now;
-
             InitRunParams();
             HOperatorSet.GenEmptyObj(out HObject EmptyObj);
             OutputImage = EmptyObj;
@@ -331,7 +400,6 @@
 
                 Thread.Sleep(30);
             }
-
             Msg = "杩愯瓒呮椂";
             Result = false;
             RunTime = (DateTime.Now - StartTime).TotalMilliseconds;
@@ -357,8 +425,9 @@
             try
             {
                 if (string.IsNullOrEmpty(fullPath))
+                {
                     return false;
-
+                }
                 if (!fullPath.Contains(".json"))
                 {
                     Debug.WriteLine("鏂囦欢璺緞涓嶅畬鏁�");
@@ -369,7 +438,6 @@
                     Debug.WriteLine("鏂囦欢璺緞涓嶅畬鏁�");
                     return false;
                 }
-
                 // 鑾峰彇涓嶅甫鏂囦欢鍚嶇殑鐩綍璺緞
                 string directoryPath = Path.GetDirectoryName(fullPath);
                 strProcessName = Path.GetFileNameWithoutExtension(fullPath);
@@ -380,7 +448,6 @@
                     Save(directoryPath);
                     return true;
                 }
-
                 string strJson = string.Empty;
                 using (StreamReader streamReader = new StreamReader(fullPath, Encoding.UTF8))
                 {
@@ -389,8 +456,9 @@
                 }
                 Params = JsonConvert.DeserializeObject<ProcessParams>(strJson);
                 if (Params == null)
+                {
                     return false;
-
+                }
                 Params.FixDeserializedData();
                 return true;
             }
@@ -453,20 +521,20 @@
                 return value;
         }
 
-        public static void Bitmap2HObject(Bitmap bmp, out HObject image)
+        public static HImage Bitmap2HObject(Bitmap bmp)
         {
             BitmapData srcBmpData;
-
+            HImage image = null;
             try
             {
-                if (bmp == null || bmp.Width == 0 || bmp.Height == 0)
+                if (bmp.Tag != null && bmp == null || bmp.Width == 0 || bmp.Height == 0)
                 {
                     image = null;
-                    return;
+                    return image;
                 }
-
                 lock (bmp)
                 {
+                    image = new HImage();
                     switch (bmp.PixelFormat)
                     {
                         case PixelFormat.Format24bppRgb:
@@ -475,35 +543,41 @@
                             int width = bmp.Width;
                             int height = bmp.Height;
                             int stride = srcBmpData.Stride;
-
                             if (stride == width * 3)
-                                HOperatorSet.GenImageInterleaved(out image, srcBmpData.Scan0, "bgr", bmp.Width, bmp.Height, 0, "byte", 0, 0, 0, 0, -1, 0);
+                            {
+                                image.GenImageInterleaved(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);
-                            HOperatorSet.GenImage1(out image, "byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
+                            image.GenImage1("byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
                             bmp.UnlockBits(srcBmpData);
                             break;
                     }
                 }
-                return;
+                return image;
             }
             catch
             {
+                if (image != null)
+                {
+                    image.Dispose();
+                }
                 image = null;
-                return;
+                return image;
             }
         }
 
-        private static HObject HandleStrideAlignmentBest(IntPtr scan0, int width, int height, int stride)
+        private static HImage 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;
@@ -521,31 +595,31 @@
                             expectedStride
                         );
                     }
-                    HOperatorSet.GenImageInterleaved(out HObject ho_img, new IntPtr(dstPtr), "bgr", width, height, 0, "byte", width, height, 0, 0, -1, 0);
-                    return ho_img;
+                    image.GenImageInterleaved(new IntPtr(dstPtr), "bgr", width, height, 0, "byte", width, height, 0, 0, -1, 0);
+                    return image;
                 }
             }
         }
 
-        public static unsafe void HObject2Bitmap(HObject hObject, out Bitmap bmp)
+        public static unsafe void HObject2Bitmap(HImage hImage, out Bitmap bmp)
         {
             try
             {
-                if (hObject == null || !hObject.IsInitialized())
+                if (hImage == null || !hImage.IsInitialized())
                 {
                     bmp = null;
                     return;
                 }
 
                 // 鑾峰彇鍥惧儚淇℃伅
-                HOperatorSet.GetImageSize(hObject, out HTuple width, out HTuple height);
-                HOperatorSet.CountChannels(hObject, out HTuple channels);
+                hImage.GetImageSize(out HTuple width, out HTuple height);
+                HTuple channels = hImage.CountChannels();
 
                 if (channels.I == 1)
                 {
                     // 鐏板害鍥惧鐞�
                     HTuple ptr, type;
-                    HOperatorSet.GetImagePointer1(hObject, out ptr, out type, out width, out height);
+                    ptr = hImage.GetImagePointer1(out type, out width, out height);
 
                     bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
 
@@ -574,7 +648,7 @@
                 {
                     // 褰╄壊鍥惧鐞嗭紙BGR椤哄簭锛�
                     HTuple ptrR, ptrG, ptrB, type;
-                    HOperatorSet.GetImagePointer3(hObject, out ptrR, out ptrG, out ptrB, out type, out width, out height);
+                    hImage.GetImagePointer3(out ptrR, out ptrG, out ptrB, out type, out width, out height);
 
                     bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
                     BitmapData bmpData = bmp.LockBits(
@@ -611,20 +685,20 @@
             }
         }
 
-        public static void Mat2HObject(Mat mat, out HObject image)
+        public static HImage Mat2HObject(Mat mat)
         {
+            HImage image = null;
             try
             {
                 if (mat == null || mat.Empty())
                 {
-                    image = null;
-                    return;
+                    return image;
                 }
 
                 if (mat.Type() == MatType.CV_8UC3) // 褰╄壊鍥惧儚 (BGR)
                 {
-                    HOperatorSet.GenImageInterleaved(
-                        out image,
+                    image = new HImage();
+                    image.GenImageInterleaved(
                         mat.Data,
                         "bgr",
                         mat.Width,
@@ -635,8 +709,8 @@
                 }
                 else if (mat.Type() == MatType.CV_8UC1) // 鐏板害鍥惧儚
                 {
-                    HOperatorSet.GenImage1(
-                        out image,
+                    image = new HImage();
+                    image.GenImage1(
                         "byte",
                         mat.Width,
                         mat.Height,
@@ -646,12 +720,12 @@
                 {
                     throw new ArgumentException($"Mat2HObject涓嶆敮鎸佺殑鍥惧儚鏍煎紡锛歿mat.Type()}");
                 }
-                return;
+                return image;
             }
             catch
             {
                 image = null;
-                return;
+                return image;
             }
         }
 
@@ -1251,7 +1325,7 @@
         /// <param name="startPoint"></param>
         /// <param name="endPoint"></param>
         /// <returns></returns>
-        public static double GetDistanceP2P(HPoint startPoint, HPoint endPoint)
+        public double GetDistanceP2P(HPoint startPoint, HPoint endPoint)
         {
             try
             {
@@ -1260,12 +1334,12 @@
             catch { return 9994; }
         }
 
-        public static double GetDistanceP2P(Point startPoint, Point endPoint)
+        public double GetDistanceP2P(Point startPoint, Point endPoint)
         {
             return GetDistanceP2P(new HPoint(startPoint), new HPoint(endPoint));
         }
 
-        public static double DistanceP2P(double startX, double startY, double endX, double endY)
+        public double DistanceP2P(double startX, double startY, double endX, double endY)
         {
             return GetDistanceP2P(new HPoint(startX, startY), new HPoint(endX, endY));
         }
@@ -1276,17 +1350,17 @@
         /// <param name="startPoint"></param>
         /// <param name="endPoint"></param>
         /// <returns></returns>
-        public static HPoint GetMidPoint(HPoint startPoint, HPoint endPoint)
+        public HPoint GetMidPoint(HPoint startPoint, HPoint endPoint)
         {
             return new HPoint((startPoint.X + endPoint.X) / 2, (startPoint.Y + endPoint.Y) / 2);
         }
 
-        public static Point GetMidPoint(Point startPoint, Point endPoint)
+        public Point GetMidPoint(Point startPoint, Point endPoint)
         {
             return new Point((startPoint.X + endPoint.X) / 2, (startPoint.Y + endPoint.Y) / 2);
         }
 
-        public static System.Drawing.Point GetMidPoint(System.Drawing.Point startPoint, System.Drawing.Point endPoint)
+        public 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);
         }
@@ -1297,7 +1371,7 @@
         /// <param name="point"></param>
         /// <param name="segment"></param>
         /// <returns></returns>
-        public static bool IsPointOnSegment(HPoint pt, HSegment segment, double tolerance = 1e-3)
+        public bool IsPointOnSegment(HPoint pt, HSegment segment, double tolerance = 1e-3)
         {
             // 璁$畻鐩寸嚎鏂圭▼鐨勭郴鏁�
             double A = segment.EndY - segment.StartX;
@@ -1320,7 +1394,7 @@
             return false;
         }
 
-        public static bool IsPointOnSegment(double px, double py, double x1, double y1, double x2, double y2)
+        public 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));
         }
@@ -1345,7 +1419,7 @@
             catch { return false; }
         }
 
-        public static bool IsPointNearRectangleSilde(HPoint pt, HRectangle2 rect, double tolerance = 100)
+        public 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);
         }
@@ -1357,21 +1431,21 @@
         /// <param name="pt2"></param>
         /// <param name="tolerance"></param>
         /// <returns></returns>
-        public static bool IsPointNearPoint(HPoint pt1, HPoint pt2, double tolerance = 100)
+        public bool IsPointNearPoint(HPoint pt1, HPoint pt2, double tolerance = 100)
         {
             if (GetDistanceP2P(pt1, pt2) <= tolerance)
                 return true;
             return false;
         }
 
-        public static bool IsPointNearPoint(Point pt1, Point pt2, double tolerance = 100)
+        public bool IsPointNearPoint(Point pt1, Point pt2, double tolerance = 100)
         {
             if (GetDistanceP2P(pt1, pt2) <= tolerance)
                 return true;
             return false;
         }
 
-        public static bool IsPointNearPoint(double x1, double y1, double x2, double y2, int tolerance = 100)
+        public bool IsPointNearPoint(double x1, double y1, double x2, double y2, int tolerance = 100)
         {
             return IsPointNearPoint(new HPoint(x1, y1), new HPoint(x2, y2), tolerance);
         }
@@ -1384,7 +1458,7 @@
         /// <param name="corner"></param>
         /// <param name="tolerance"></param>
         /// <returns></returns>
-        public static bool IsPointNearRectangleCorner(Point pt, Rectangle rect, out string corner, double tolerance = 10)
+        public bool IsPointNearRectangleCorner(Point pt, Rectangle rect, out string corner, double tolerance = 10)
         {
             try
             {
@@ -1423,7 +1497,7 @@
             catch { corner = ""; return false; }
         }
 
-        public static bool IsPointNearRectangleCorner(HPoint pt, HRectangle2 rect, out string corner, double tolerance = 10)
+        public bool IsPointNearRectangleCorner(HPoint pt, HRectangle2 rect, out string corner, double tolerance = 10)
         {
             try
             {
@@ -1471,7 +1545,7 @@
         /// <param name="p3">绾�2璧峰鐐�</param>
         /// <param name="p4"></param>
         /// <returns></returns>
-        public static Point2d? GetLineIntersection(Point2d p1, Point2d p2, Point2d p3, Point2d p4, bool bOnSegment = false)
+        public Point2d? GetLineIntersection(Point2d p1, Point2d p2, Point2d p3, Point2d p4, bool bOnSegment = false)
         {
             // 鐩寸嚎1鐨勫悜閲�
             double x1 = p1.X, y1 = p1.Y;
@@ -1508,7 +1582,7 @@
         #region Halcon
         // Chapter: Graphics / Output
         // Short Description: Display 3D object models 
-        public static void visualize_object_model_3d(HTuple hv_WindowHandle, HTuple hv_ObjectModel3D,
+        public 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)
         {
@@ -3236,7 +3310,7 @@
 
         // Chapter: Calibration / Camera Parameters
         // Short Description: Set the value of a specified camera parameter in the camera parameter tuple. 
-        public static void set_cam_par_data(HTuple hv_CameraParamIn, HTuple hv_ParamName, HTuple hv_ParamValue,
+        public void set_cam_par_data(HTuple hv_CameraParamIn, HTuple hv_ParamName, HTuple hv_ParamValue,
             out HTuple hv_CameraParamOut)
         {
             // Local iconic variables 
@@ -3340,7 +3414,7 @@
             }
         }
 
-        public static void gen_arrow_contour_xld(out HObject ho_Arrow, HTuple hv_Row1, HTuple hv_Column1,
+        public 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 
@@ -3514,7 +3588,7 @@
             }
         }
 
-        public static void get_rect2_vertex(HTuple hv_Row, HTuple hv_Column, HTuple hv_Phi, HTuple hv_Length1,
+        public 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)
@@ -3721,7 +3795,7 @@
             }
         }
 
-        public static void pts_to_best_line(out HObject ho_LineXld, HTuple hv_Rows, HTuple hv_Columns,
+        public 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)
         {
@@ -3807,7 +3881,7 @@
             }
         }
 
-        public static (double, double) CalculateTailValues(HTuple minValue, HTuple maxValue, HTuple mean, HTuple deviation, double tailPercentage = 0.3)
+        public (double, double) CalculateTailValues(HTuple minValue, HTuple maxValue, HTuple mean, HTuple deviation, double tailPercentage = 0.3)
         {
             // 璁$畻浣庡熬鐏板害鍊�
             double lowTailValue = minValue.TupleReal() + (mean.TupleReal() - minValue.TupleReal()) * tailPercentage;
@@ -3840,7 +3914,7 @@
         /// <param name="hv_Column2">缁撴潫妯潗鏍�</param>
         /// <param name="hv_ResultRow">缁撴灉鐐归泦鍚堢旱鍧愭爣</param>
         /// <param name="hv_ResultColumn">缁撴灉鐐归泦鍚堟í鍧愭爣</param>
-        public static void Rake(HObject ho_Image, out HObject ho_Regions, HTuple hv_Elements,
+        public 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)
@@ -5036,7 +5110,7 @@
             catch { }
         }
 
-        public static void scale_gray_map(HObject ho_Image, out HObject ho_Image1, HTuple hv_Min, HTuple hv_Max)
+        public 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);
@@ -5123,7 +5197,7 @@
 
         #region OpenCVSharp
         // 鏍规嵁Mat绫诲瀷杩斿洖瀵瑰簲鐨勬棤鏁堝��
-        public static Scalar GetInvalidValueForMat(Mat mat)
+        public Scalar GetInvalidValueForMat(Mat mat)
         {
             MatType type = mat.Type();
             if (type == MatType.CV_8UC1 || type == MatType.CV_8UC3)
@@ -5136,7 +5210,7 @@
                 return new Scalar(0); // 瀵逛簬8浣嶆棤绗﹀彿绫诲瀷锛�0鏄畨鍏ㄧ殑鏃犳晥鍊�
         }
 
-        public static void RGB2XYZ(double sR, double sG, double sB, out double X, out double Y, out double Z)
+        public void RGB2XYZ(double sR, double sG, double sB, out double X, out double Y, out double Z)
         {
             // 杈撳叆鐨勯鑹插�� (sR, sG, sB) 搴斾负 0 鍒� 255 涔嬮棿鐨勫��
 
@@ -5167,7 +5241,7 @@
             Z = Math.Round(var_Z / (var_X + var_Y + var_Z), 3);
         }
 
-        public static void ExtractFrames(string videoPath, string outputDir)
+        public void ExtractFrames(string videoPath, string outputDir)
         {
             // 妫�鏌ヨ棰戞枃浠舵槸鍚﹀瓨鍦�
             if (!File.Exists(videoPath))

--
Gitblit v1.9.3