141 lines
4.5 KiB
C#
141 lines
4.5 KiB
C#
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();
|
|
}
|
|
|
|
|
|
}
|
|
}
|