C# Basler相機接口二次封裝與調用


C# Basler相機接口二次封裝與調用

介紹

對Basler相機庫進行二次封裝,封裝內容為4部分:初始化相機調用、相機曝光參數、相機捕捉參數、輸出結果(圖片長、寬、byte流數據)。

備注:使用前需引用Basler.Pylon庫文件

源代碼(含舉例)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
using Basler.Pylon;

namespace qyl
{
    public class Program
    {
        static void Main()
        {
            CameraAction[] camera = new CameraAction[2];  //2個相機
            if (camera[0].camera_Initial(camsn[0]))
                {
                    camera[0].camera_ExpoChange(camex[0]);
                    //MessageBox.Show(string.Format("{0}打開成功", camemg[0]), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Console.WriteLine("{0}打開成功", camemg[0]);
                    if (camera[0].camera_Grabing())
                    {
                        Console.WriteLine("拍照成功");
                        camera[0].sizew;  //int圖片寬度
                        camera[0].sizeh;  //int圖片高度
                        camera[0].bufferdata;  //byte[]

                    }
                    camera[0].camera_Close();
                    
                }
        }

    }
    public class CameraAction
    {
        #region 變量
        private Camera camera = null;
        private IGrabResult GrabResult = null;
        public int sizew { get; set; }
        public int sizeh { get; set; }
        public byte[] bufferdata { get; set; }

        public bool camisinited { get; set; }
        #endregion

        public bool camera_Initial(string serialno)
        {
            try
            {
                camisinited = false;
                camera = new Camera(serialno);
                camera.CameraOpened += Configuration.SoftwareTrigger;
                camera.Open();
                camera.Parameters[PLTransportLayer.HeartbeatTimeout].SetValue(1000, IntegerValueCorrection.Nearest);
                camera.StreamGrabber.Start(GrabStrategy.OneByOne, GrabLoop.ProvidedByUser);
                camisinited = true;
                return true;
            }
            catch (Exception)
            {
                if (camera != null)
                {
                    camera.CameraOpened -= Configuration.SoftwareTrigger;
                    if (camera.IsOpen)
                    {
                        if (camera.StreamGrabber.IsGrabbing)
                        {
                            camera.StreamGrabber.Stop();
                        }
                    }
                    camera.Close();
                    camera = null;
                }
                camisinited = false;
                return false;
            }

        }

        public void camera_ExpoChange(double exposure)
        {
            camera.Parameters[PLCamera.ExposureTimeAbs].SetValue(exposure * 1000);
        }

        public bool camera_Grabing()
        {
            if (camera.WaitForFrameTriggerReady(100, TimeoutHandling.ThrowException))
            {
                camera.ExecuteSoftwareTrigger();
            }
            GrabResult = camera.StreamGrabber.RetrieveResult(1000, TimeoutHandling.ThrowException);
            //GrabResult = camera.StreamGrabber.GrabOne(1000);
            if (GrabResult.GrabSucceeded)
            {
                sizew = GrabResult.Width;
                sizeh = GrabResult.Height;
                bufferdata = GrabResult.PixelData as byte[];
                GrabResult.Dispose();
                return true;
            }
            else
            {
                return false;
            }
        }

        public void camera_Close()
        {
            camera.StreamGrabber.Stop();
            camera.Close();
            camisinited = false;
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM