123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- 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<MainThreadClass> LsMainThread = new List<MainThreadClass>();
- #endregion
- #region 窗体事件
- /// <summary>
- /// 窗体加载事件
- /// </summary>
- public MainForm()
- {
- InitializeComponent();
- if(File.Exists(".\\Config\\CCDCountConfig.xml"))
- {
- Configs = XmlStorage.DeserializeFromXml<List<(CameraConfig CameraConfigValue, ShuLiConfigClass ShuLiConfigValue)>>(".\\Config\\CCDCountConfig.xml");
- }
- SDKSystem.Initialize();
- FormKongjianInit();
- RunAllCameraIdentify();
- }
- /// <summary>
- /// 菜单切换按钮点击事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- 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;
- }
- }
- /// <summary>
- /// 识别界面按钮点击事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- 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);
- }
- // <summary>
- /// 窗体关闭事件
- /// </summary>
- 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 私有方法
- /// <summary>
- /// 图像缩放方法(保持宽高比)
- /// </summary>
- /// <param name="image">图像</param>
- /// <param name="maxWidth">目标宽度</param>
- /// <param name="maxHeight">目标高度</param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 窗体控件初始化
- /// </summary>
- 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;
- }
- /// <summary>
- /// 加载目标窗体内容到当前窗体
- /// </summary>
- /// <param name="targetForm">要加载的窗体实例</param>
- 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();
- }
- /// <summary>
- /// 启动所有相机识别
- /// </summary>
- 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;
- }
- }
- /// <summary>
- /// 停止所有相机识别
- /// </summary>
- private void StopAllCameraIdentify()
- {
- foreach (var item in LsMainThread)
- {
- item.StopMianThread();
- }
- }
- #endregion
- #region 主界面回调事件
- /// <summary>
- /// 通知主界面回调的事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void Worker_MianThreadToFrom(object sender, ActiveObjectEventArgsClass e)
- {
- // 事件处理逻辑
- Console.WriteLine("结果已通知到主界面!");
-
- //此处进行与下位机的交互(将通道数给下位机控制程序)
- //float getvalue = 0;
- }
- #endregion
- }
- }
|