From 96b6869bb20677f9b945f67c014a9b992ee05ac4 Mon Sep 17 00:00:00 2001
From: patrick.xu <patrick.xu@broconcentric.com>
Date: 星期三, 28 四月 2021 11:40:01 +0800
Subject: [PATCH] 1. 添加离线测试功能 2. 单键分开测量修改赋值和释放时判断

---
 src/Bro.Device.HikCamera/HikCameraDriver.cs |   79 +++++----------------------------------
 1 files changed, 11 insertions(+), 68 deletions(-)

diff --git a/src/Bro.Device.HikCamera/HikCameraDriver.cs b/src/Bro.Device.HikCamera/HikCameraDriver.cs
index 57aebcd..b77232f 100644
--- a/src/Bro.Device.HikCamera/HikCameraDriver.cs
+++ b/src/Bro.Device.HikCamera/HikCameraDriver.cs
@@ -324,7 +324,7 @@
                 NewImageSet(set);
                 OnHImageOutput?.BeginInvoke(this, hImage, set.Id, null, null);
 
-                HikToBitmap(nWidth, nHeight, pData, set.Id);
+                Generate8GrayImageByPointer(nWidth, nHeight, pData, set.Id);
             }
             else
             {
@@ -382,7 +382,7 @@
                         uint nHeight = pFrameInfo.nHeight;
 
                         //HikToBitmap(pFrameInfo, frameInfo.pBufAddr);
-                        HikToBitmap((int)nWidth, (int)nHeight, frameInfo.pBufAddr, "");
+                        Generate8GrayImageByPointer((int)nWidth, (int)nHeight, frameInfo.pBufAddr, "");
                     }
                 }
             }
@@ -392,9 +392,11 @@
             }
         }
 
-        public override ImageSet Snapshot(IOperationConfig config)
+        public override IImageSet Snapshot(IOperationConfig config)
         {
-            ImageSet set = base.Snapshot(config);
+            ImageSet set = new ImageSet();
+            InitialImageSet(set, (config as CameraOprerationConfigBase).ImageSaveOption);
+
             MyCamera.MV_FRAME_OUT frameInfo = new MyCamera.MV_FRAME_OUT();
             nRet = MyCamera.MV_OK;
 
@@ -437,71 +439,13 @@
 
                         set.HImage = hImage;
 
-                        HikToBitmap((int)nWidth, (int)nHeight, frameInfo.pBufAddr, set.Id);
+                        Generate8GrayImageByPointer((int)nWidth, (int)nHeight, frameInfo.pBufAddr, set.Id);
                         return set;
                     }
                 }
             }
 
             throw new Exception($"Grap Image Failed:{nRet:x8}");
-        }
-
-        [DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)]
-        public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);
-
-        private async void HikToBitmap(int width, int height, IntPtr dataPtr, string imgSetId)
-        {
-            await Task.Run(() =>
-            {
-                //************************Mono8 杞� Bitmap*******************************
-                Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
-                Bitmap showImage = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
-
-                ColorPalette cp = bmp.Palette;
-                for (int i = 0; i < 256; i++)
-                {
-                    cp.Entries[i] = Color.FromArgb(i, i, i);
-                }
-                bmp.Palette = cp;
-
-                ColorPalette cp1 = showImage.Palette;
-                for (int i = 0; i < 256; i++)
-                {
-                    cp1.Entries[i] = Color.FromArgb(i, i, i);
-                }
-                showImage.Palette = cp1;
-
-                int[] ptr = new int[3];
-                Rectangle rect = new Rectangle(0, 0, width, height);
-                BitmapData bitmapData = bmp.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
-                BitmapData showImageData = showImage.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
-                int PixelSize = Bitmap.GetPixelFormatSize(bitmapData.PixelFormat) / 8;
-
-                if (width % 4 == 0)
-                {
-                    CopyMemory(bitmapData.Scan0, dataPtr, (uint)(width * height * PixelSize));
-                    CopyMemory(showImageData.Scan0, dataPtr, (uint)(width * height * PixelSize));
-                }
-                else
-                {
-                    ptr[0] = bitmapData.Scan0.ToInt32();
-                    ptr[1] = showImageData.Scan0.ToInt32();
-                    ptr[2] = (int)dataPtr;
-                    for (int i = 0; i < height - 1; i++)
-                    {
-                        ptr[2] += width;
-
-                        CopyMemory((IntPtr)ptr[0], (IntPtr)ptr[2], (uint)(width * PixelSize));
-                        CopyMemory((IntPtr)ptr[1], (IntPtr)ptr[2], (uint)(width * PixelSize));
-                        ptr[0] += bitmapData.Stride;
-                        ptr[1] += showImageData.Stride;
-                    }
-                }
-                bmp.UnlockBits(bitmapData);
-                showImage.UnlockBits(showImageData);
-
-                SaveOriginImage(bmp, showImage, imgSetId);
-            });
         }
 
         readonly MyCamera device = new MyCamera();
@@ -519,15 +463,14 @@
         {
             if (nMsgType == MyCamera.MV_EXCEPTION_DEV_DISCONNECT)
             {
-                Thread.Sleep(1000);
-
-                Stop();
-
                 if (CurrentState != EnumHelper.DeviceState.DSClose)
                 {
                     int reTryTimes = 3;
                     do
                     {
+                        Thread.Sleep(1000);
+                        Stop();
+
                         try
                         {
                             Start();
@@ -540,7 +483,7 @@
                             if (reTryTimes > 0)
                             {
                                 //OnLog?.Invoke(DateTime.Now, this, "閲嶆柊杩炴帴鐩告満寮傚父\r\n" + ex.GetExceptionMessage());
-                                LogAsync(DateTime.Now, "閲嶆柊杩炴帴寮傚父", ex.GetExceptionMessage());
+                                LogAsync(DateTime.Now, $"{this.Name}閲嶆柊杩炴帴寮傚父", ex.GetExceptionMessage());
                             }
                             else
                             {

--
Gitblit v1.8.0