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