连接Basler相机Demo(C#版)

using System;
//using System.Collections.Generic;
using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
using Basler.Pylon;
//using System;
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 IGrabResult grabResult;

        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;


            //指定图片路径:图片控件的名称 .Image = Image. FromFile( 图像的路径 );
            //pictureBox1.Image = Image.FromFile(@"C:\Users\86186\Desktop\01.jpg");
            //图片在图片控件中被拉伸或收缩,适合图片的大小
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            //pictureBox2.Image = Image.FromFile(@"C:\Users\86186\Desktop\02.jpg");
            //pictureBox2.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();
            //pictureBox1.Image = camera.GrabResult2Bmp(camera.grabResult);
        }
        //连续拍
        private void button_keepShot_Click(object sender, EventArgs e)
        {
            camera.KeepShot();
        }
        //关闭窗体,释放相机
        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            camera.DestroyCamera();
        }

    }
}

在这里插入图片描述

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在 C# 中使用 Basler 相机,可以使用 Basler Pylon SDK。该 SDK 提供了一组功能强大的 API,可以方便地连接、配置和控制 Basler 相机,以及获取图像数据。 以下是使用 Basler Pylon SDK 连接 Basler 相机的基本步骤: 1. 下载并安装 Basler Pylon SDK。 2. 在 Visual Studio 中创建一个新的 C# 项目。 3. 在项目中添加对 PylonC.NET.dll 的引用。 4. 在代码中创建一个 Pylon.Camera 类的实例,并调用 Open() 方法打开相机。 ```csharp using PylonC.NET; ... // 创建相机实例 Pylon.Camera camera = new Pylon.Camera(); // 打开相机 camera.Open(); ``` 5. 配置相机的参数,例如曝光时间、增益等。 ```csharp // 设置曝光时间 camera.Parameters[PLCamera.ExposureTimeAbs].SetValue(10000); // 设置增益 camera.Parameters[PLCamera.GainRaw].SetValue(2.0); ``` 6. 开始采集图像数据。 ```csharp // 开始采集图像 camera.StreamGrabber.Start(); // 获取图像数据 Pylon.GrabResult result = camera.StreamGrabber.RetrieveResult(5000, Pylon.TimeoutHandling.ThrowException); if (result.GrabSucceeded) { // 处理图像数据 byte[] imageData = result.PixelData.ToArray(); // ... } // 停止采集图像 camera.StreamGrabber.Stop(); ``` 7. 最后,记得在程序退出时关闭相机。 ```csharp // 关闭相机 camera.Close(); ``` 以上是使用 Basler Pylon SDK 连接 Basler 相机的基本步骤,具体的应用场景和需求可能还需要进一步的配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值