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