using CCDCount.DLL; using CCDCount.MODEL.ConfigModel; using CCDCount.MODEL.ShuLiClass; using LogClass; using MvCameraControl; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Windows.Forms; namespace CCDCount.Forms { public partial class MainForm : Form { #region 变量 //菜单栏状态,true为展开,false为收起 bool meunStatic = false; //当前显示窗体 Form showFrom = null; //List<(CameraConfig CameraConfigValue, ShuLiConfigClass ShuLiConfigValue)> Configs = // new List<(CameraConfig CameraConfigValue, ShuLiConfigClass ShuLiConfigValue)>() // { // (new CameraConfig() // { // CameraSNNum = "L39879764", // CameraName = "MV-CL042-91GC", // IsOpenLoad = true, // CamerNo = 0 // },new ShuLiConfigClass() // { // Channel = 8, // CameraSN = "L39879764", // }), // }; List<(CameraConfig CameraConfigValue, ShuLiConfigClass ShuLiConfigValue)> Configs = new List<(CameraConfig CameraConfigValue, ShuLiConfigClass ShuLiConfigValue)>(); #endregion #region 实例 //主线程实例队列 public List LsMainThread = new List(); #endregion #region 窗体事件 /// /// 窗体加载事件 /// public MainForm() { InitializeComponent(); if(File.Exists(".\\Config\\CCDCountConfig.xml")) { Configs = XmlStorage.DeserializeFromXml>(".\\Config\\CCDCountConfig.xml"); } SDKSystem.Initialize(); FormKongjianInit(); RunAllCameraIdentify(); } /// /// 菜单切换按钮点击事件 /// /// /// private void MenuSwitchBtn_Click(object sender, EventArgs e) { if (meunStatic) { MenuSwitchBtn.Image = ScaleImage(Properties.Resources.进入__白_, 32, 32); HistoryFormBtn.Image = ScaleImage(Properties.Resources.数据_白, 32, 32); HistoryFormBtn.Text = ""; IdentifyFormBtn.Image = ScaleImage(Properties.Resources.相机小_白, 32, 32); IdentifyFormBtn.Text = ""; SettingFromBtn.Image = ScaleImage(Properties.Resources.设置_白, 32, 32); SettingFromBtn.Text = ""; menupanel.Width = 70; meunStatic = false; } else { MenuSwitchBtn.Image = ScaleImage(Properties.Resources.返回__白_, 32, 32); IdentifyFormBtn.Image = null; IdentifyFormBtn.Text = "识 别 界 面"; HistoryFormBtn.Image = null; HistoryFormBtn.Text = "数 据 界 面"; SettingFromBtn.Image = null; SettingFromBtn.Text = "参 数 设 置"; menupanel.Width = 200; meunStatic = true; } } /// /// 识别界面按钮点击事件 /// /// /// private void IdentifyFormBtn_Click(object sender, EventArgs e) { LoadFormContent(new IdentifyCameraForm(Configs.Select(o=>o.CameraConfigValue).ToList(),LsMainThread)); } private void HistoryFormBtn_Click(object sender, EventArgs e) { LoadFormContent(new DataShowForm(LsMainThread)); } private void MainForm_Resize(object sender, EventArgs e) { LoadFormContent(showFrom); } // /// 窗体关闭事件 /// private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { SDKSystem.Finalize(); StopAllCameraIdentify(); this.Dispose(); if(showFrom != null) showFrom.Dispose(); Environment.Exit(0); } private void SettingFromBtn_Click(object sender, EventArgs e) { LoadFormContent(new SettingForm(LsMainThread)); } private void MainForm_Load(object sender, EventArgs e) { HistoryFormBtn_Click(this, EventArgs.Empty); } #endregion #region 私有方法 /// /// 图像缩放方法(保持宽高比) /// /// 图像 /// 目标宽度 /// 目标高度 /// private Image ScaleImage(Image image, int maxWidth, int maxHeight) { var ratioX = (double)maxWidth / image.Width; var ratioY = (double)maxHeight / image.Height; var ratio = Math.Min(ratioX, ratioY); var newWidth = (int)(image.Width * ratio); var newHeight = (int)(image.Height * ratio); var newImage = new Bitmap(newWidth, newHeight); using (var graphics = Graphics.FromImage(newImage)) { graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; graphics.DrawImage(image, 0, 0, newWidth, newHeight); } return newImage; } /// /// 窗体控件初始化 /// private void FormKongjianInit() { IdentifyFormBtn.Image = ScaleImage(Properties.Resources.相机小_白, 32, 32); IdentifyFormBtn.Text = ""; HistoryFormBtn.Image = ScaleImage(Properties.Resources.数据_白, 32, 32); HistoryFormBtn.Text = ""; MenuSwitchBtn.Image = ScaleImage(Properties.Resources.进入__白_, 32, 32); menupanel.Width = 70; SettingFromBtn.Image = ScaleImage(Properties.Resources.设置_白, 32, 32); SettingFromBtn.Text = ""; //this.FormBorderStyle = FormBorderStyle.None; // 全屏显示 this.WindowState = FormWindowState.Maximized; // 窗口置顶 //this.TopMost = true; } /// /// 加载目标窗体内容到当前窗体 /// /// 要加载的窗体实例 private void LoadFormContent(Form targetForm) { if (targetForm == null) return; if (showFrom == targetForm) { } else if (showFrom != null) { showFrom.Close(); } showFrom = targetForm; targetForm.TopLevel = false; // 关键设置 targetForm.FormBorderStyle = FormBorderStyle.None; targetForm.Dock = DockStyle.Fill; // 新增关键设置 Mainpanel.Controls.Clear(); Mainpanel.Controls.Add(targetForm); targetForm.Show(); } /// /// 启动所有相机识别 /// private void RunAllCameraIdentify() { if(Configs.Count == 0) { MessageBox.Show("尚未添加相机,请前往配置页面配置相机"); return; } foreach (var item in Configs.Select(o => o.ShuLiConfigValue).ToList()) { LsMainThread.Add(new MainThreadClass(item, Configs.Select(o => o.CameraConfigValue).ToList().Where(o=>o.CameraSNNum == item.CameraSN).First())); } for(int i = 0; i < LsMainThread.Count; i++) { //判断是否添加线程 if (!LsMainThread[i].IsOpenLoadThread) return; //启动单相机实例的全部线程 if(!LsMainThread[i].StartMianThread(Configs.Select(o => o.CameraConfigValue).ToList().Where(o=>o.CameraSNNum == LsMainThread[i].ThisCameraSN).First())) { LOG.error(LsMainThread[i].ThisCamerName + "启动失败"); MessageBox.Show(LsMainThread[i].ThisCamerName + "启动失败"); return; } LsMainThread[i].WorkerToFrom += Worker_MianThreadToFrom; } } /// /// 停止所有相机识别 /// private void StopAllCameraIdentify() { foreach (var item in LsMainThread) { item.StopMianThread(); } } #endregion #region 主界面回调事件 /// /// 通知主界面回调的事件 /// /// /// private void Worker_MianThreadToFrom(object sender, ActiveObjectEventArgsClass e) { // 事件处理逻辑 Console.WriteLine("结果已通知到主界面!"); //此处进行与下位机的交互(将通道数给下位机控制程序) //float getvalue = 0; } #endregion } }