From 00ea1cd461d6d8d128d727f6a40edca75da9ccdd Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期三, 08 七月 2020 16:38:46 +0800
Subject: [PATCH] 相机运行界面基类添加操作配置 gocator驱动修正长宽比例,输出进行复制插值处理 显示基元添加8个方向的拉伸和移动处理 标签基元实现3个方向的拉伸和移动

---
 src/Bro.Device.Gocator/GocatorDriver.cs |   82 ++++++++++++++++++++++++++++++++++++++---
 1 files changed, 76 insertions(+), 6 deletions(-)

diff --git a/src/Bro.Device.Gocator/GocatorDriver.cs b/src/Bro.Device.Gocator/GocatorDriver.cs
index 39fb4a2..2a659df 100644
--- a/src/Bro.Device.Gocator/GocatorDriver.cs
+++ b/src/Bro.Device.Gocator/GocatorDriver.cs
@@ -86,18 +86,88 @@
                             long bufferSize = width * height;
                             IntPtr bufferPointer = surfaceMsg.Data;
 
+                            float zoomFactor = (float)((double)surfaceMsg.YResolution / (double)surfaceMsg.XResolution);
+                            int zoomHeight = (int)(zoomFactor * height);
+                            IntPtr zoomPtr = Marshal.AllocHGlobal(zoomHeight * (int)width * 2);
+
+                            //娌℃湁鎻掑�硷紝榛樿0
+                            //Parallel.For(0, height, h =>
+                            //  {
+                            //      CopyMemory((IntPtr)((long)zoomPtr + width * 2 * Math.Floor(h * zoomFactor)), (IntPtr)((long)bufferPointer + width * 2 * h), width * 2);
+                            //  });
+
+                            //浣跨敤涓婁竴琛屽師鏈夋暟鎹�
+                            Parallel.For(0, zoomHeight, h =>
+                            {
+                                int originHeightIndex = (int)Math.Floor((double)height * h / (double)zoomHeight);
+
+                                CopyMemory((IntPtr)((long)zoomPtr + width * 2 * h), (IntPtr)((long)bufferPointer + width * 2 * originHeightIndex), width * 2);
+                            });
+
                             if (imgSet != null)
                             {
                                 imgSet.HImage = new HImage();
-                                imgSet.HImage.GenImage1("uint2", (int)width, (int)height, bufferPointer);
+                                imgSet.HImage.GenImage1("uint2", (int)width, zoomHeight, zoomPtr);
+                                //imgSet.HImage = imgSet.HImage.ZoomImageSize((int)width, zoomHeight, "constant");
+
 
                                 imgSet.HImage_2 = new HImage();
-                                imgSet.HImage_2.GenImage1("uint2", (int)width, (int)height, bufferPointer);
+                                imgSet.HImage_2.GenImage1("uint2", (int)width, zoomHeight, zoomPtr);
+
+                                //imgSet.HImage_2 = imgSet.HImage_2.ZoomImageSize((int)width, zoomHeight, "constant");
                             }
 
-                            Generate16GrayImageByPointer((int)width, (int)height, bufferPointer, imgSet?.Id);
+                            Generate16GrayImageByPointer((int)width, zoomHeight, zoomPtr, imgSet?.Id).ContinueWith(t =>
+                            {
+                                Marshal.FreeHGlobal(zoomPtr);
+                            });
+
+                            //int zoomHeight = (int)(((double)surfaceMsg.YResolution / (double)surfaceMsg.XResolution) * (double)surfaceMsg.Length);
+
+                            //if (imgSet != null)
+                            //{
+                            //    imgSet.HImage = new HImage();
+                            //    imgSet.HImage.GenImage1("uint2", (int)width, (int)height, bufferPointer);
+                            //    imgSet.HImage = imgSet.HImage.ZoomImageSize((int)width, zoomHeight, "constant");
+
+
+                            //    imgSet.HImage_2 = new HImage();
+                            //    imgSet.HImage_2.GenImage1("uint2", (int)width, (int)height, bufferPointer);
+
+                            //    imgSet.HImage_2 = imgSet.HImage_2.ZoomImageSize((int)width, zoomHeight, "constant");
+                            //}
+
+                            //Generate16GrayImageByPointer((int)width, (int)height, bufferPointer, imgSet?.Id);
                         }
                         break;
+                        //case GoDataMessageType.SurfaceIntensity:
+                        //    {
+                        //        GoSurfaceIntensityMsg surfaceMsg = (GoSurfaceIntensityMsg)dataObj;
+                        //        long width = surfaceMsg.Width;
+                        //        long height = surfaceMsg.Length;
+                        //        long bufferSize = width * height;
+                        //        IntPtr bufferPointer = surfaceMsg.Data;
+
+                        //        //int zoomHeight = (surfaceMsg.YResolution * (int)surfaceMsg.Length * 10) / surfaceMsg.XResolution;
+
+                        //        int zoomHeight = (int)(((double)surfaceMsg.YResolution / (double)surfaceMsg.XResolution) * (double)surfaceMsg.Length);
+
+                        //        if (imgSet != null)
+                        //        {
+                        //            imgSet.HImage = new HImage();
+                        //            imgSet.HImage.GenImage1("uint2", (int)width, (int)height, bufferPointer);
+                        //            imgSet.HImage = imgSet.HImage.ZoomImageSize((int)width, zoomHeight, "constant");
+
+
+                        //            imgSet.HImage_2 = new HImage();
+                        //            imgSet.HImage_2.GenImage1("uint2", (int)width, (int)height, bufferPointer);
+
+                        //            imgSet.HImage_2 = imgSet.HImage_2.ZoomImageSize((int)width, zoomHeight, "constant");
+                        //        }
+
+                        //        Generate16GrayImageByPointer((int)width, (int)height, bufferPointer, imgSet?.Id);
+                        //    }
+                        //    break;
                 }
             }
         }
@@ -336,9 +406,9 @@
         public override async void SaveOriginImage(Bitmap map, Bitmap showImage, string imgSetId)
         {
             Task.Run(() =>
-            {
-                OnImageUpdated?.Invoke(this, showImage, imgSetId);
-            });
+             {
+                 OnImageUpdated?.Invoke(this, showImage, imgSetId);
+             });
 
             GoImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId) as GoImageSet;
 

--
Gitblit v1.8.0