From dbae9c048fa0cd67c2e1161e5b6b693f87064154 Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期三, 01 七月 2020 17:53:15 +0800
Subject: [PATCH] Merge branch 'master' of http://gitblit.broconcentric.com:8088/r/M071

---
 src/Bro.Common.Device/DeviceBase/CameraBase.cs |   68 ++++++++++++++++++++--------------
 1 files changed, 40 insertions(+), 28 deletions(-)

diff --git a/src/Bro.Common.Device/DeviceBase/CameraBase.cs b/src/Bro.Common.Device/DeviceBase/CameraBase.cs
index b479b33..4204c9b 100644
--- a/src/Bro.Common.Device/DeviceBase/CameraBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/CameraBase.cs
@@ -71,7 +71,7 @@
         #endregion
 
         #region 鍥剧墖鐩稿叧
-        public event Action<CameraBase, Bitmap, string> OnImageUpdated;
+        public Action<CameraBase, Bitmap, string> OnImageUpdated;
 
         public Action<CameraBase, HObject, string> OnHImageOutput { get; set; }
         public event Action OnCameraOpModeChanged;
@@ -141,22 +141,21 @@
         /// </summary>
         /// <returns></returns>
         public abstract void Snapshot();
+        public abstract IImageSet Snapshot(IOperationConfig config);
 
-        public virtual ImageSet Snapshot(IOperationConfig config)
+        public virtual void InitialImageSet(IImageSet set, ImageSaveOption saveOption)
         {
             OpMode = CameraOpMode.SingleSnapShot;
 
-            ImageSet set = new ImageSet();
-            CameraOprerationConfigBase opConfig = config as CameraOprerationConfigBase;
-            set.ImageSaveOption.DataFrom(opConfig.ImageSaveOption);
+            //CameraOprerationConfigBase opConfig = config as CameraOprerationConfigBase;
+            set.ImageSaveOption.DataFrom(saveOption);
 
             set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage;
             set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage;
             set.IsAddtionalSaved = !string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType);
             set.OnImageSetTimeout += ImageSet_OnImageSetTimeout;
-            _imageSetList.Add(set);
 
-            return set;
+            _imageSetList.Add(set);
         }
 
         /// <summary>
@@ -172,13 +171,13 @@
         #endregion
 
         #region 鍩哄厓澶勭悊
-        public event Action<CameraBase, List<IShapeElement>, string> OnElementsUpdated;
+        public Action<CameraBase, List<IShapeElement>, string> OnElementsUpdated;
         #endregion
 
         #region 鍥剧墖缂撳瓨/淇濆瓨
-        readonly ConcurrentBag<ImageSet> _imageSetList = new ConcurrentBag<ImageSet>();
+        public readonly ConcurrentBag<IImageSet> _imageSetList = new ConcurrentBag<IImageSet>();
 
-        public void NewImageSet(ImageSet set)
+        public void NewImageSet(IImageSet set)
         {
             set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage;
             set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage;
@@ -202,7 +201,7 @@
                 OnImageUpdated?.Invoke(this, showImage, imgSetId);
             });
 
-            ImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId);
+            IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId);
 
             if (set == null)
                 return;
@@ -225,10 +224,6 @@
                         {
                             LogAsync(DateTime.Now, $"{set.Id}鍘熷浘淇濆瓨澶辫触", ex.GetExceptionMessage());
                         }
-                        //finally
-                        //{
-                        //    set.IsOriginSaved = true;
-                        //}
                     }
                     set.IsOriginSaved = true;
                     ClearImageSet(set);
@@ -241,7 +236,7 @@
             if (eleList.Count > 0)
                 OnElementsUpdated?.BeginInvoke(this, eleList, imgSetId, null, null);
 
-            ImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId);
+            IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId);
             if (set == null)
                 return;
 
@@ -305,7 +300,7 @@
         {
             await Task.Run(() =>
             {
-                ImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId);
+                IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId);
                 if (set == null)
                     return;
 
@@ -341,7 +336,7 @@
             });
         }
 
-        private string CheckImageDirectory(string subDir, string prefix)
+        protected string CheckImageDirectory(string subDir, string prefix)
         {
             if (string.IsNullOrWhiteSpace(subDir))
             {
@@ -363,7 +358,7 @@
             return imgDir;
         }
 
-        private void SaveImageByNameAndType(Bitmap map, string imageName, ImageFormat imgFormat, string imageDir)
+        protected void SaveImageByNameAndType(Bitmap map, string imageName, ImageFormat imgFormat, string imageDir)
         {
             string filePath = Path.Combine(imageDir, $"{imageName}.{imgFormat.ToString().ToLower()}");
             map.Save(filePath, imgFormat);
@@ -371,7 +366,7 @@
 
         //private Timer clearImageSetTimer = null;
 
-        public void ClearImageSet(ImageSet set)
+        public void ClearImageSet(IImageSet set)
         {
             try
             {
@@ -402,7 +397,7 @@
 
         public void ClearImageSet(string imgSetId)
         {
-            ImageSet set = _imageSetList.First(u => u.Id == imgSetId);
+            IImageSet set = _imageSetList.First(u => u.Id == imgSetId);
             if (set != null)
                 ClearImageSet(set);
         }
@@ -548,6 +543,7 @@
         {
             await Task.Run(() =>
             {
+                Thread.Sleep(1000);
                 int widthIn4 = (int)Math.Ceiling(width / 4.0) * 4;
 
                 Bitmap bmp = new Bitmap(widthIn4, height, PixelFormat.Format48bppRgb);
@@ -575,15 +571,14 @@
                       {
                           int index = (i + 1) % width + widthIn4 * ((i + 1) / width) - 1;
 
-                          showBitmapBuffer[index * 6] = data[i * 2];
-                          showBitmapBuffer[index * 6 + 1] = data[i * 2 + 1];
+                          showBitmapBuffer[index * 6] = bitmapBuffer[index * 6] = data[i * 2];
+                          showBitmapBuffer[index * 6 + 1] = bitmapBuffer[index * 6 + 1] = data[i * 2 + 1];
                       });
                 }
-                
+
                 bmp.UnlockBits(bitmapData);
                 showImage.UnlockBits(showImageData);
 
-                //showImage.Save(@"D:\1.bmp", ImageFormat.Bmp);
                 SaveOriginImage(bmp, showImage, imgSetId);
             });
         }
@@ -838,7 +833,24 @@
         }
     }
 
-    public class ImageSet : IDisposable
+    public interface IImageSet : IDisposable
+    {
+        DateTime InitialTime { get; set; }
+        string Id { get; }
+        HImage HImage { get; set; }
+        Bitmap Image { get; set; }
+
+        object SaveLock { get; set; }
+
+        ImageSaveOption ImageSaveOption { get; set; }
+        bool IsOriginSaved { get; set; }
+        bool IsFitSaved { get; set; }
+        bool IsAddtionalSaved { get; set; }
+
+        event Action<ImageSet> OnImageSetTimeout;
+    }
+
+    public class ImageSet : IImageSet
     {
         public DateTime InitialTime { get; set; } = DateTime.Now;
 
@@ -873,7 +885,7 @@
         //public bool IsInvokeSaveNG { get; set; } = false;
         public bool IsAddtionalSaved { get; set; } = false;
 
-        public object SaveLock = new object();
+        public object SaveLock { get; set; } = new object();
 
         public event Action<ImageSet> OnImageSetTimeout;
         private Timer autoDisposeTimer = null;
@@ -888,7 +900,7 @@
             autoDisposeTimer = new Timer(OnAutoDispose, null, -1, 10 * 1000);
         }
 
-        public void Dispose()
+        public virtual void Dispose()
         {
             autoDisposeTimer.Change(-1, -1);
             autoDisposeTimer.Dispose();

--
Gitblit v1.8.0