You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

451 lines
16 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//using Microsoft.Extensions.DependencyInjection;
//using MvCamCtrl.NET;
//using MvCamCtrl.NET.CameraParams;
//using SlnMesnac.Config;
//using System;
//using System.Collections.Generic;
//using System.Drawing;
//using System.IO;
//using System.Linq;
//using System.Text;
//using System.Threading;
//namespace SlnMesnac.Common
//{
// public class CCameraHik
// {
// #region 单例实现
// private static readonly Lazy<CCameraHik> lazy = new Lazy<CCameraHik>(() => new CCameraHik());
// public static CCameraHik Instance
// {
// get
// {
// return lazy.Value;
// }
// }
// #endregion
// public delegate void RefreshCamera(string ip,bool flag);
// public static event RefreshCamera RefreshCameraEvent;
// private DebugConfig config = DebugConfig.Instance;
// /// <summary>
// /// 已经打开的设备集合
// /// </summary>
// public static Dictionary<string, CCamera> m_MyCameras = new Dictionary<string, CCamera>();
// /// <summary>
// /// 枚举到的设备集合
// /// </summary>
// List<CCameraInfo> m_ltDeviceList = new List<CCameraInfo>();
// Thread m_hReceiveThread1 = null;
// Thread m_hReceiveThread2 = null;
// bool m_bGrabbing = false;
// // 存放照片路径
// public string PicturePath = System.Environment.CurrentDirectory + "/picture/";
// // ch:用于从驱动获取图像的缓存 | en:Buffer for getting image from driver
// private static Object BufForDriverLock = new Object();
// CImage m_pcImgForDriver = null; // 图像信息
// CFrameSpecInfo m_pcImgSpecInfo = null; // 图像的水印信息
// UInt32 m_nCurWidth = 0;
// UInt32 m_nCurHeight = 0;
// MvGvspPixelType m_emPixelType = MvGvspPixelType.PixelType_Gvsp_Mono8;
// /// <summary>
// /// 枚举设备
// /// </summary>
// public void DeviceListAndStart()
// {
// // ch:创建设备列表 | en:Create Device List
// System.GC.Collect();
// //枚举设备
// int nRet = CSystem.EnumDevices(CSystem.MV_GIGE_DEVICE | CSystem.MV_USB_DEVICE, ref m_ltDeviceList);
// if (0 != nRet)
// {
// // ShowErrorMsg("Enumerate devices fail!", 0);
// return;
// }
// //打开设备
// foreach (CCameraInfo deviceInfo in m_ltDeviceList)
// {
// bool flag = OpenDevice(deviceInfo);
// if(!flag)
// {
// // TODO 重连
// }
// }
// Console.WriteLine("设备数:"+m_ltDeviceList.Count);
// StartGrab();
// }
// public bool OpenDevice(CCameraInfo device)
// {
// try
// {
// CCamera item = new CCamera();
// int nRet = item.CreateHandle(ref device);
// if (CErrorDefine.MV_OK != nRet)
// {
// return false;
// }
// nRet = item.OpenDevice();
// if (CErrorDefine.MV_OK != nRet)
// {
// item.DestroyHandle();
// Console.WriteLine("Device open fail!", nRet);
// return false;
// }
// // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera)
// if (device.nTLayerType == CSystem.MV_GIGE_DEVICE)
// {
// int nPacketSize = item.GIGE_GetOptimalPacketSize();
// if (nPacketSize > 0)
// {
// nRet = item.SetIntValue("GevSCPSPacketSize", (uint)nPacketSize);
// if (nRet != CErrorDefine.MV_OK)
// {
// Console.WriteLine("Set Packet Size failed!", nRet);
// }
// }
// }
// // 设置触发模式
// item.SetEnumValue("TriggerMode", (uint)MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);
// // ch:触发源设为软触发 | en:Set trigger source as Software
// item.SetEnumValue("TriggerSource", (uint)MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE);
// // ch:取图前的必要操作步骤 | en:Necessary operation before grab
// CGigECameraInfo cGigEDeviceInfo = (CGigECameraInfo)device;
// uint nIp1 = ((cGigEDeviceInfo.nCurrentIp & 0xff000000) >> 24);
// uint nIp2 = ((cGigEDeviceInfo.nCurrentIp & 0x00ff0000) >> 16);
// uint nIp3 = ((cGigEDeviceInfo.nCurrentIp & 0x0000ff00) >> 8);
// uint nIp4 = (cGigEDeviceInfo.nCurrentIp & 0x000000ff);
// string ip = $"{nIp1}.{nIp2}.{nIp3}.{nIp4}";
// Console.WriteLine("DevIP:" + ip);
// RefreshCameraEvent?.Invoke(ip, true);
// m_MyCameras.Add(ip, item);
// Console.WriteLine("open success");
// return true;
// }
// catch (Exception ex)
// {
// Console.WriteLine("open()"+ex.Message);
// return false;
// }
// }
// // ch:取图前的必要操作步骤 | en:Necessary operation before grab
// private Int32 NecessaryOperBeforeGrab(CCamera m_MyCamera)
// {
// // ch:取图像宽 | en:Get Iamge Width
// CIntValue pcWidth = new CIntValue();
// int nRet = m_MyCamera.GetIntValue("Width", ref pcWidth);
// if (CErrorDefine.MV_OK != nRet)
// {
// //ShowErrorMsg("Get Width Info Fail!", nRet);
// return nRet;
// }
// m_nCurWidth = (UInt32)pcWidth.CurValue;
// // ch:取图像高 | en:Get Iamge Height
// CIntValue pcHeight = new CIntValue();
// nRet = m_MyCamera.GetIntValue("Height", ref pcHeight);
// if (CErrorDefine.MV_OK != nRet)
// {
// // ShowErrorMsg("Get Height Info Fail!", nRet);
// return nRet;
// }
// m_nCurHeight = (UInt32)pcHeight.CurValue;
// // ch:取像素格式 | en:Get Pixel Format
// CEnumValue pcPixelFormat = new CEnumValue();
// nRet = m_MyCamera.GetEnumValue("PixelFormat", ref pcPixelFormat);
// if (CErrorDefine.MV_OK != nRet)
// {
// // ShowErrorMsg("Get Pixel Format Fail!", nRet);
// return nRet;
// }
// m_emPixelType = (MvGvspPixelType)pcPixelFormat.CurValue;
// return CErrorDefine.MV_OK;
// }
// public void StartGrab()
// {
// m_bGrabbing = true;
// foreach (KeyValuePair<string,CCamera> pair in m_MyCameras)
// {
// int nRet = NecessaryOperBeforeGrab(pair.Value);
// if (CErrorDefine.MV_OK != nRet)
// {
// // TODO重新销毁打开
// return;
// }
// if (config.Scanner1IP == pair.Key)
// {
// m_hReceiveThread1 = new Thread(() => ReceiveThreadProcess(pair.Key,pair.Value));
// m_hReceiveThread1.Start();
// // ch:开始采集 | en:Start Grabbing
// nRet = pair.Value.StartGrabbing();
// if (CErrorDefine.MV_OK != nRet)
// {
// m_bGrabbing = false;
// m_hReceiveThread1.Join();
// // ShowErrorMsg("Start Grabbing Fail!", nRet);
// return;
// }
// }
// pair.Value.SetEnumValue("ExposureAuto", 0);
// nRet = pair.Value.SetFloatValue("ExposureTime", 45000.0f);
// if (nRet != CErrorDefine.MV_OK)
// {
// // ShowErrorMsg("Set Exposure Time Fail!", nRet);
// }
// pair.Value.SetEnumValue("GainAuto", 0);
// nRet = pair.Value.SetFloatValue("Gain", 10.0f);
// if (nRet != CErrorDefine.MV_OK)
// {
// // ShowErrorMsg("Set Gain Fail!", nRet);
// }
// nRet = pair.Value.SetFloatValue("AcquisitionFrameRate", 9.4f);
// if (nRet != CErrorDefine.MV_OK)
// {
// // ShowErrorMsg("Set Frame Rate Fail!", nRet);
// }
// }
// }
// public void StopGrab()
// {
// try
// {
// m_bGrabbing = false;
// if (m_hReceiveThread1 != null && m_hReceiveThread1.IsAlive)
// {
// m_hReceiveThread1.Join(); // 等待线程结束
// }
// if (m_hReceiveThread2 != null && m_hReceiveThread2.IsAlive)
// {
// m_hReceiveThread2.Join(); // 等待线程结束
// }
// foreach (KeyValuePair<string, CCamera> pair in m_MyCameras)
// {
// // ch:停止采集 | en:Stop Grabbing
// int nRet = pair.Value.StopGrabbing();
// if (nRet != CErrorDefine.MV_OK)
// {
// Console.WriteLine($"相机{pair.Key} Stop Grabbing Fail!", nRet);
// }
// // 销毁句柄
// nRet = pair.Value.CloseDevice();
// if (nRet != CErrorDefine.MV_OK)
// {
// Console.WriteLine($"相机{pair.Key} 关闭设备 Fail!", nRet);
// }
// // 销毁句柄
// nRet = pair.Value.DestroyHandle();
// if (nRet != CErrorDefine.MV_OK)
// {
// Console.WriteLine($"相机{pair.Key} 销毁句柄 Fail!", nRet);
// }
// }
// }
// catch (Exception ex)
// {
// Console.WriteLine($"stopGarb异常:" + ex.Message);
// }
// }
// /// <summary>
// /// 箱体码扫码成功以后触发OCR相机拍照解析
// /// </summary>
// /// <returns></returns>
// public bool TriggerGather()
// {
// //采集前确保照片文件夹为空,防止照片比对出错
// DeleteAllPictures(PicturePath);
// // 两个相机采集照片
// foreach (KeyValuePair<string,CCamera> pair in m_MyCameras)
// {
// // 采集一次
// // ch:触发命令 | en:Trigger command
// int nRet = pair.Value.SetCommandValue("TriggerSoftware");
// if (CErrorDefine.MV_OK != nRet)
// {
// return false;
// }
// }
// return true;
// }
// /// <summary>
// /// 照片接收线程
// /// </summary>
// /// <param name="ip"></param>
// /// <param name="m_MyCamera"></param>
// public void ReceiveThreadProcess(string ip ,CCamera m_MyCamera)
// {
// int nRet = CErrorDefine.MV_OK;
// while (m_bGrabbing)
// {
// if (ip == config.Scanner1IP)
// {
// Console.WriteLine($"{DateTime.Now} 线程1等待接收数据 -->");
// }
// CFrameout pcFrameInfo = new CFrameout();
// CDisplayFrameInfo pcDisplayInfo = new CDisplayFrameInfo();
// CPixelConvertParam pcConvertParam = new CPixelConvertParam();
// nRet = m_MyCamera.GetImageBuffer(ref pcFrameInfo, 1000);
// if (CErrorDefine.MV_OK == nRet)
// {
// lock (BufForDriverLock)
// {
// if (null != m_pcImgForDriver)
// {
// m_pcImgForDriver.Destory();
// m_pcImgForDriver = null;
// }
// m_pcImgForDriver = pcFrameInfo.Image.Clone() as CImage;
// m_pcImgSpecInfo = pcFrameInfo.FrameSpec;
// }
// pcDisplayInfo.Image = pcFrameInfo.Image;
// SaveAndChangeJpg(ip,m_MyCamera);
// m_MyCamera.FreeImageBuffer(ref pcFrameInfo);
// }
// }
// }
// /// <summary>
// /// 保存照片OCR解析删除照片
// /// </summary>
// /// <param name="ip"></param>
// /// <param name="m_MyCamera"></param>
// private void SaveAndChangeJpg(string ip,CCamera m_MyCamera)
// {
// string testPath = PicturePath + "3.jpg";
// CSaveImgToFileParam stSaveFileParam = new CSaveImgToFileParam();
// lock (BufForDriverLock)
// {
// if (null == m_pcImgForDriver || 0 == m_pcImgForDriver.FrameLen)
// {
// return;
// }
// stSaveFileParam.ImageType = MV_SAVE_IAMGE_TYPE.MV_IMAGE_JPEG;
// stSaveFileParam.Image = m_pcImgForDriver;
// stSaveFileParam.Quality = 80;
// stSaveFileParam.MethodValue = 2;
// stSaveFileParam.ImagePath = PicturePath + $"photo_{ip}.jpg";
// int nRet = m_MyCamera.SaveImageToFile(ref stSaveFileParam);
// if (CErrorDefine.MV_OK != nRet)
// {
// Console.WriteLine("保存照片失败");
// return;
// }
// }
// }
// // 删除指定文件里的照片
// private void DeletePhoto(string filePath)
// {
// try
// {
// // Check if the file exists
// if (File.Exists(filePath))
// {
// // Delete the file
// File.Delete(filePath);
// Console.WriteLine("Photo deleted successfully.");
// }
// else
// {
// Console.WriteLine("File does not exist.");
// }
// }
// catch (Exception ex)
// {
// Console.WriteLine("Error deleting photo: " + ex.Message);
// }
// }
// /// <summary>
// /// 删除文件夹所有照片
// /// </summary>
// /// <param name="path"></param>
// static void DeleteAllPictures(string path)
// {
// try
// {
// // 检查照片路径是否存在
// if (Directory.Exists(path))
// {
// // 获取文件夹中的所有文件
// string[] files = Directory.GetFiles(path);
// // 遍历文件并删除
// foreach (string file in files)
// {
// File.Delete(file);
// Console.WriteLine($"Deleted file: {file}");
// }
// Console.WriteLine("All pictures deleted successfully.");
// }
// else
// {
// Console.WriteLine("无路径");
// }
// }
// catch (Exception ex)
// {
// Console.WriteLine($"DeleteAllPictures异常: {ex.Message}");
// }
// }
// }
//}