巴斯勒SDK开发

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

image.png

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 += Camera_CameraImageEvent;
        }
        /// <summary>
        /// 图像显示
        /// </summary>
        /// <param name="bmp"></param>
            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 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;
            }
        }
    }

}

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋小童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值