本文已参与「新人创作礼」活动,一起开启掘金创作之路。

```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;//放出一个CameraCamera 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;}}
} }
```



















