巴斯勒相机SDK全代码

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

image.png

```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; } ///

/// 图像显示 /// /// private void CameraCameraImageEvent(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;
        }
    }
}

}

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

宋小童

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

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

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

打赏作者

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

抵扣说明:

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

余额充值