using System;
using System.Linq;
using Basler.Pylon;
using System.Drawing;
using System.Drawing.Imaging;
namespace BaslerDemo
{
class BalserCam
{
public int CameraNumber = CameraFinder.Enumerate().Count;
public delegate void CameraImage(Bitmap bmp);
public event CameraImage CameraImageEvent;
Camera camera;
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);
}
}
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();
}
}
public 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;
}
}
}
}
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;
using System.Drawing;
namespace BaslerDemo
{
public partial class MainForm : Form
{
BalserCam camera = new BalserCam();
public MainForm()
{
InitializeComponent();
camera.CameraImageEvent += Camera_CameraImageEvent;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
}
private void Camera_CameraImageEvent(Bitmap bmp)
{
pictureBox1.Invoke(new MethodInvoker(delegate
{
Bitmap old = pictureBox1.Image as Bitmap;
pictureBox1.Image = bmp;
if (old != null)
old.Dispose();
}));
}
void Unanble()
{
button_stop.Enabled = false;
button_Oneshot.Enabled = false;
button_keepShot.Enabled = false;
}
private void MainForm_Load(object sender, EventArgs e)
{
if (camera.CameraNumber > 0)
camera.CameraInit();
else
{
MessageBox.Show("未连接到相机");
Unanble();
}
}
private void button_stop_Click(object sender, EventArgs e)
{
camera.Stop();
}
private void button_Oneshot_Click(object sender, EventArgs e)
{
camera.OneShot();
}
private void button_keepShot_Click(object sender, EventArgs e)
{
camera.KeepShot();
}
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
camera.DestroyCamera();
}
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/9836b3ed5d6c44bfa23f85a51f0f731f.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMzc1MzE4,size_16,color_FFFFFF,t_70)