using LB_VisionControl; using LB_VisionProcesses.Cameras; using ReaLTaiizor.Forms; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Linq; using static System.Net.Mime.MediaTypeNames; using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace LB_SmartVision.Forms.Pages.CameraPage { public partial class CameraForm : Form { BaseCamera camera { get; set; } UserPictureBox onlinePictureBox { get; set; } public CameraForm() { InitializeComponent(); } public CameraForm(BaseCamera camera) { InitializeComponent(); // 使用 LINQ 获取所有枚举值并打印 var brands = Enum.GetValues(typeof(CameraBrand)).Cast(); foreach (var brand in brands) uiComboBoxBrand.Items.Add(brand.ToString()); if (camera == null) return; this.camera = camera; this.Text = camera.SN; //设置品牌 uiComboBoxBrand.Text = camera.Brand.ToString(); onlinePictureBox = new UserPictureBox(uiGroupBoxImage); this.uiGroupBoxImage.Controls.Clear(); this.uiGroupBoxImage.Controls.Add(onlinePictureBox); onlinePictureBox.Dock = DockStyle.Fill; //设置触发 camera.GetTriggerMode(out TriggerMode triggerMode, out TriggerSource triggerSource); if (triggerSource == TriggerSource.Software) uiRadioButtonSoftTrigger.Checked = true; else uiRadioButtonHardTrigger.Checked = true; uiButtonGrabOnce.Enabled = uiRadioButtonSoftTrigger.Checked; uiButtonStartSoftGrab.Enabled = uiRadioButtonSoftTrigger.Checked; uiButtonCloseSoftGrab.Enabled = uiRadioButtonSoftTrigger.Checked; uiButtonStartHardGrab.Enabled = !uiRadioButtonSoftTrigger.Checked; //设置曝光和增益 camera.GetExpouseTime(out double exp); uiTextBoxExp.Text = exp.ToString(); camera.GetGain(out double gain); uiTextBoxGain.Text = gain.ToString(); //加载回调函数 Subscribe(); } private void CameraForm_FormClosing(object sender, FormClosingEventArgs e) { if (camera == null) return; camera.StopGrabbing(); if (uiRadioButtonSoftTrigger.Checked) camera.SetTriggerMode(TriggerMode.On, TriggerSource.Software); else camera.SetTriggerMode(TriggerMode.On, TriggerSource.Line0); camera.StartGrabbing(); Unsubscribe(); } public void Unsubscribe() { try { if (camera == null) return; //取消回调函数 camera.ImageGrabbed -= GetImageBllComplete; } catch (Exception ex) { // 记录错误信息 Debug.WriteLine($"错误: {ex.Message}"); } } public void Subscribe() { try { if (camera == null) return; //取消回调函数 camera.ImageGrabbed -= GetImageBllComplete; //加载回调函数 camera.ImageGrabbed += GetImageBllComplete; } catch (Exception ex) { // 记录错误信息 Debug.WriteLine($"错误: {ex.Message}"); } } private void uiRadioButtonSoftTrigger_CheckedChanged(object sender, EventArgs e) { uiButtonGrabOnce.Enabled = uiRadioButtonSoftTrigger.Checked; uiButtonStartSoftGrab.Enabled = uiRadioButtonSoftTrigger.Checked; uiButtonCloseSoftGrab.Enabled = uiRadioButtonSoftTrigger.Checked; uiButtonStartHardGrab.Enabled = !uiRadioButtonSoftTrigger.Checked; if (camera == null) return; if (uiRadioButtonSoftTrigger.Checked) camera.SetTriggerMode(TriggerMode.On, TriggerSource.Software); else camera.SetTriggerMode(TriggerMode.On, TriggerSource.Line0); } private void uiButtonGrabOnce_Click(object sender, EventArgs e) { if (camera == null) return; Task.Factory.StartNew(() => { DateTime startTime = DateTime.Now; // 当前时间 camera.GetImageWithSoftTrigger(out Bitmap bitmap); this.BeginInvoke(new Action(() => { if (bitmap != null) this.uiTextBoxGrabTime.Text = (DateTime.Now - startTime).TotalMilliseconds.ToString(); else this.uiTextBoxGrabTime.Text = "-1ms"; })); }); } private void uiButtonStartSoftGrab_Click(object sender, EventArgs e) { if (camera == null) return; Task.Factory.StartNew(() => { camera.StopGrabbing(); camera.StartWith_SoftTriggerModel(); }); } private void uiButtonCloseSoftGrab_Click(object sender, EventArgs e) { if (camera == null) return; Task.Factory.StartNew(() => { camera.StopGrabbing(); camera.SetTriggerMode(TriggerMode.On, TriggerSource.Software); camera.StartGrabbing(); }); } private void uiButtonStartHardGrab_Click(object sender, EventArgs e) { if (camera == null) return; Task.Factory.StartNew(() => { camera.StopGrabbing(); camera.StartWith_HardTriggerModel(); }); } /// /// 相机回调运行 /// /// /// private void GetImageBllComplete(object sender, CameraEventArgs e) { if (e.Bitmap == null) return; lock (e.Bitmap) { if (this.InvokeRequired) // 检查是否需要在UI线程上调用 { this.Invoke(new Action(() => { onlinePictureBox.Image = e.Bitmap; })); // 递归调用自身,但这次在UI线程上 } else { onlinePictureBox.Image = e.Bitmap; } } } private ulong ImageWidth; private ulong ImageHeight; private Pen pen = new Pen(Color.Blue, 3f); private System.Drawing.Point[] stPointList = new System.Drawing.Point[4]; private void pictureBox_Paint(object sender, PaintEventArgs e) { } private void uiTextBoxExp_TextChanged(object sender, EventArgs e) { if (camera == null) return; double exp = 1000; if (double.TryParse(uiTextBoxExp.Text.ToString(), out exp)) camera.SetExpouseTime(exp); } private void uiTextBoxGain_TextChanged(object sender, EventArgs e) { if (camera == null) return; double gain = 10; if (double.TryParse(uiTextBoxGain.Text.ToString(), out gain)) camera.SetGain(gain); } private void cob_Brand_SelectedIndexChanged(object sender, EventArgs e) { if (uiComboBoxBrand.Text == "MindCamera") btnSetting.Visible = true; else btnSetting.Visible = false; } private void btn_Setting_Click(object sender, EventArgs e) { } } }