Basler_connect/WindowsFormsApp1/Form1.cs

141 lines
4.5 KiB
C#
Raw Permalink Normal View History

2025-01-18 14:03:40 +08:00
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Basler.Pylon;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
//public class DoubleBufferedPictureBox : PictureBox
//{
// public DoubleBufferedPictureBox()
// {
// this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
// this.UpdateStyles();
// }
//}
private readonly Basler Basler;
// 定義一個 PictureBox 的列表
public List<PictureBox> pictureBoxes;
public Form1()
{
InitializeComponent();
//// 使用自定義的PictureBox類
//DoubleBufferedPictureBox pictureBox1 = new DoubleBufferedPictureBox();
//DoubleBufferedPictureBox pictureBox2 = new DoubleBufferedPictureBox();
Basler = new Basler(this);
Basler.CameraImageEvent += Camera_CameraImageEvent;
//Basler.CameraImageEvent1 += Camera_CameraImageEvent1;
// 在構造函數中初始化 pictureBoxes 列表
pictureBoxes = new List<PictureBox> { pictureBox1, pictureBox2 /*, 其他 PictureBox 控件 */ };
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button5_Click(object sender, EventArgs e)
{
textBox1.Text = Basler.CameraNumber.ToString();
//如果连接相机个数大于0的话 初始化之前写的CameraInit();
if (Basler.CameraNumber > 0)
{
Basler.CameraInit();
}
else
{
MessageBox.Show("未連接到相機");
Unable();
}
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Basler.DestroyCamera();
pictureBox1.Image?.Dispose();
pictureBox2.Image?.Dispose();
}
void Unable()
{
this.button1.Enabled = false;
this.button2.Enabled = false;
this.button3.Enabled = false;
this.button4.Enabled = false;
}
private void Camera_CameraImageEvent(Bitmap bmp, int cameraIndex)
{
// 確保 cameraIndex 不超出範圍
if (cameraIndex >= 0 && cameraIndex < pictureBoxes.Count)
{
// 根據 cameraIndex 決定要更新哪個 pictureBox
PictureBox pictureBoxToUpdate = pictureBoxes[cameraIndex];
//使用委托进行跨线程交互 防止线程卡死状态在Invoke前面加一个Begin
pictureBoxToUpdate.BeginInvoke(new MethodInvoker(delegate
{
Bitmap old = pictureBoxToUpdate.Image as Bitmap;
pictureBoxToUpdate.Image = bmp;
if (old != null)
old.Dispose();
}));
}
else
{
Console.WriteLine($"無效的相機索引:{cameraIndex}");
}
}
private void button2_Click(object sender, EventArgs e)
{
Basler.OneShot(0);
}
private void button8_Click(object sender, EventArgs e)
{
Basler.OneShot(1);
}
private void button3_Click(object sender, EventArgs e)
{
Basler.Stop(0);
button3.Enabled = false;
button4.Enabled = true;
button2.Enabled = true;
}
private void button7_Click(object sender, EventArgs e)
{
Basler.Stop(1);
button7.Enabled = false;
button6.Enabled = true;
button8.Enabled = true;
}
private void button4_Click(object sender, EventArgs e)
{
Basler.KeepShot(0);
button4.Enabled = false;
button2.Enabled = false;
}
private void button6_Click(object sender, EventArgs e)
{
Basler.KeepShot(1);
button6.Enabled = false;
button8.Enabled = false;
}
private void button1_Click(object sender, EventArgs e)
{
Basler.Close();
}
}
}