using LB_VisionControls;
|
using LB_VisionProcesses.Cameras;
|
using LB_VisionProcesses.Cameras.HikCameras;
|
using LB_VisionProcesses.Cameras.HRCameras;
|
using LB_VisionProcesses.Cameras.LBCameras;
|
using LB_VisionProcesses.Cameras.LocalCameras;
|
using LB_VisionProcesses.Cameras.MicroCameras;
|
using LB_VisionProcesses.Cameras.MindCameras;
|
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;
|
|
//设置品牌
|
if (camera is HRCamera)
|
{
|
uiComboBoxBrand.SelectedIndex = uiComboBoxBrand.FindString(typeof(HRCamera).Name);
|
}
|
else if (camera is LBCamera)
|
{
|
uiComboBoxBrand.SelectedIndex = uiComboBoxBrand.FindString(typeof(LBCamera).Name);
|
}
|
else if(camera is LocalCamera)
|
{
|
uiComboBoxBrand.SelectedIndex = uiComboBoxBrand.FindString(typeof(LocalCamera).Name);
|
}
|
else if (camera is HikCamera)
|
{
|
uiComboBoxBrand.SelectedIndex = uiComboBoxBrand.FindString(typeof(HikCamera).Name);
|
}
|
else if (camera is HikCodeReader)
|
{
|
uiComboBoxBrand.SelectedIndex = uiComboBoxBrand.FindString(typeof(HikCodeReader).Name);
|
}
|
else if (camera is MindCamera)
|
{
|
uiComboBoxBrand.SelectedIndex = uiComboBoxBrand.FindString(typeof(MindCamera).Name);
|
}
|
else if (camera is MicroCamera)
|
{
|
uiComboBoxBrand.SelectedIndex = uiComboBoxBrand.FindString(typeof(MicroCamera).Name);
|
}
|
|
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;
|
}
|
}
|
}
|
|
/// <summary>
|
/// 读码回调运行
|
/// </summary>
|
/// <param name="CCDName"></param>
|
/// <param name="image"></param>
|
private void GetCodeImageBllComplete(object sender, HikCodeReaderEventArgs e)
|
{
|
if (e.Bitmap == null && e.Image == null)
|
return;
|
|
if (e.pixelType == HikCodeReaderEventArgs.PixelType.Mono8 && e.Bitmap != null)
|
{
|
lock (e.Bitmap)
|
{
|
onlinePictureBox.Image = e.Bitmap;
|
}
|
}
|
else if (e.pixelType == HikCodeReaderEventArgs.PixelType.Jpeg && e.Image != null)
|
{
|
lock (e.Image)
|
{
|
ImageWidth = (ulong)e.Image.Width;
|
ImageHeight = (ulong)e.Image.Height;
|
onlinePictureBox.Image = new Bitmap(e.Image);
|
}
|
}
|
}
|
|
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)
|
{
|
if (!(camera is HikCodeReader))
|
return;
|
|
#region 屏蔽
|
//for (int i = 0; i < ((HikCodeReader)camera).resultEx.nCodeNum; i++)
|
//{
|
// for (int j = 0; j < 4; j++)
|
// {
|
// float num = (float)resultPictureBox.Size.Width / (float)ImageWidth;
|
// float num2 = (float)resultPictureBox.Size.Height / (float)ImageHeight;
|
// float num3 = Math.Min(num, num2);
|
// if (num > num2)
|
// {
|
// stPointList[j].X = (int)((float)((HikCodeReader)camera).resultEx.stBcrInfoEx[i].pt[j].x * num3)
|
// + (int)(((float)resultPictureBox.Size.Width - (float)ImageWidth * num3) / 2f);
|
// stPointList[j].Y = (int)((float)((HikCodeReader)camera).resultEx.stBcrInfoEx[i].pt[j].y * num3);
|
// }
|
// else
|
// {
|
// stPointList[j].X = (int)((float)((HikCodeReader)camera).resultEx.stBcrInfoEx[i].pt[j].x * num3);
|
// stPointList[j].Y = (int)((float)((HikCodeReader)camera).resultEx.stBcrInfoEx[i].pt[j].y * num3)
|
// + (int)(((float)resultPictureBox.Size.Height - (float)ImageHeight * num3) / 2f);
|
// }
|
// }
|
// e.Graphics.DrawPolygon(pen, stPointList);
|
// Font font = new Font("微软雅黑", 10f, FontStyle.Bold);
|
// Brush brush = new SolidBrush(Color.AntiqueWhite);
|
// string strCode = Encoding.Default.GetString(((HikCodeReader)camera).resultEx.stBcrInfoEx[i].chCode).TrimEnd(default(char));
|
// e.Graphics.DrawString(strCode, font, brush, stPointList[3]);
|
//}
|
#endregion
|
}
|
|
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)
|
{
|
if (uiComboBoxBrand.Text == "MindCamera" && camera != null && camera is MindCamera mindCamera)
|
{
|
mindCamera.SetSetting();
|
}
|
else if (uiComboBoxBrand.Text == "LocalCamera" && camera != null && camera is LocalCamera localCamera)
|
{
|
localCamera.SetSetting();
|
}
|
}
|
}
|
}
|