本文已参与「新人创作礼」活动,一起开启掘金创作之路。
```js using Basler.Pylon; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace Basler { public partial class Form1 : Form { baslerCamcs camera = new baslerCamcs(); public Form1() { InitializeComponent(); camera.CameraImageEvent += CameraCameraImageEvent; } ///
}
void Inanble()
{
CamerOnce.Enabled = true ;
CameraKeep.Enabled = true;
CmaeraStop.Enabled = true;
}
/// <summary>
/// 相机按钮状态
/// </summary>
void Unanble()
{
CamerOnce.Enabled = false;
CameraKeep.Enabled = false;
CmaeraStop.Enabled = false;
}
/// <summary>
/// 初始化界面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
if (camera.CameraNumber > 0)
{
camera.CameraInit();
Inanble();
}
else
{
MessageBox.Show("未连接到相机");
Unanble();
}
}
/// <summary>
/// 点击拍照
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CamerOnce_Click(object sender, EventArgs e)
{
camera.OneShot();
}
/// <summary>
/// 实时拍照
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CameraKeep_Click(object sender, EventArgs e)
{
camera.KeepShot();
}
/// <summary>
/// 停止实时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CmaeraStop_Click(object sender, EventArgs e)
{
camera.Stop();
}
/// <summary>
/// 关闭界面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
camera.DestroyCamera();
}
private void CamerClick_Click(object sender, EventArgs e)
{
camera.CameraNumber= CameraFinder.Enumerate().Count;
if (camera.CameraNumber > 0)
{
camera.CameraInit();
Inanble();
MessageBox.Show("相机链接成功");
}
else
{
MessageBox.Show("未连接到相机");
Unanble();
}
}
private void CameraDK_Click(object sender, EventArgs e)
{
camera.DestroyCamera();
}
}
}
```
```
using Basler.Pylon; using System; using System.Drawing; using System.Drawing.Imaging; namespace Basler { public class baslerCamcs { //相机连接的个数 public int CameraNumber = CameraFinder.Enumerate().Count;
//委托+事件 = 回调函数,用于传递相机抓取的图像
public delegate void CameraImage(Bitmap bmp);
public event CameraImage CameraImageEvent;
//放出一个Camera
Camera camera;
//basler里用于将相机采集的图像转换成位图
PixelDataConverter pxConvert = new PixelDataConverter();
//控制相机采集图像的过程
bool GrabOver = false;
//相机初始化
public void CameraInit()
{
camera = new Camera();
//自由运行模式
camera.CameraOpened += Configuration.AcquireContinuous;
//断开连接事件
camera.ConnectionLost += Camera_ConnectionLost;
//抓取开始事件
camera.StreamGrabber.GrabStarted += StreamGrabber_GrabStarted;
//抓取图片事件
camera.StreamGrabber.ImageGrabbed += StreamGrabber_ImageGrabbed;
//结束抓取事件
camera.StreamGrabber.GrabStopped += StreamGrabber_GrabStopped;
//打开相机
camera.Open();
}
private void StreamGrabber_GrabStarted(object sender, EventArgs e)
{
GrabOver = true;
}
private void StreamGrabber_ImageGrabbed(object sender, ImageGrabbedEventArgs e)
{
IGrabResult grabResult = e.GrabResult;
if (grabResult.IsValid)
{
if (GrabOver)
CameraImageEvent(GrabResult2Bmp(grabResult));
}
}
private void StreamGrabber_GrabStopped(object sender, GrabStopEventArgs e)
{
GrabOver = false;
}
private void Camera_ConnectionLost(object sender, EventArgs e)
{
camera.StreamGrabber.Stop();
DestroyCamera();
}
public void OneShot()
{
if (camera != null)
{
camera.Parameters[PLCamera.AcquisitionMode].SetValue(PLCamera.AcquisitionMode.SingleFrame);
camera.StreamGrabber.Start(1, GrabStrategy.OneByOne, GrabLoop.ProvidedByStreamGrabber);
}
}
/// <summary>
/// 相机实时功能
/// </summary>
public void KeepShot()
{
if (camera != null)
{
camera.Parameters[PLCamera.AcquisitionMode].SetValue(PLCamera.AcquisitionMode.Continuous);
camera.StreamGrabber.Start(GrabStrategy.OneByOne, GrabLoop.ProvidedByStreamGrabber);
}
}
public void Stop()
{
if (camera != null)
{
camera.StreamGrabber.Stop();
}
}
//将相机抓取到的图像转换成Bitmap位图
Bitmap GrabResult2Bmp(IGrabResult grabResult)
{
Bitmap b = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format32bppRgb);
BitmapData bmpData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, b.PixelFormat);
pxConvert.OutputPixelFormat = PixelType.BGRA8packed;
IntPtr bmpIntpr = bmpData.Scan0;
pxConvert.Convert(bmpIntpr, bmpData.Stride * b.Height, grabResult);
b.UnlockBits(bmpData);
return b;
}
//释放相机
public void DestroyCamera()
{
if (camera != null)
{
camera.Close();
camera.Dispose();
camera = null;
}
}
}
}
```