C# Basler相机接口二次封装与调用
生活随笔
收集整理的這篇文章主要介紹了
C# Basler相机接口二次封装与调用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C# Basler相機(jī)接口二次封裝與調(diào)用
介紹
對(duì)Basler相機(jī)庫(kù)進(jìn)行二次封裝,封裝內(nèi)容為4部分:初始化相機(jī)調(diào)用、相機(jī)曝光參數(shù)、相機(jī)捕捉參數(shù)、輸出結(jié)果(圖片長(zhǎng)、寬、byte流數(shù)據(jù))。
備注:使用前需引用Basler.Pylon庫(kù)文件
源代碼(含舉例)
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個(gè)相機(jī)
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;
}
}
}
總結(jié)
以上是生活随笔為你收集整理的C# Basler相机接口二次封装与调用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 广东推出全球首款穿戴式空调:3分钟温度降
- 下一篇: PTA C语言 7-6 厘米换算英尺英寸