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<CameraBrand>();
|
foreach (var brand in brands)
|
uiComboBoxBrand.Items.Add(brand.ToString());
|
|
if (camera == null)
|
return;
|
|
this.camera = camera;
|
this.Text = camera.SN;
|
|
//设置品牌
|
|
|
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();
|
});
|
}
|
|
/// <summary>
|
/// 相机回调运行
|
/// </summary>
|
/// <param name="CCDName"></param>
|
/// <param name="image"></param>
|
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)
|
{
|
|
}
|
}
|
}
|