C# + Basler 카메라 이미지 수집 DLL
두 부분으로 나뉘는데 첫 번째 부분은 DLL 내용이고 두 번째 부분은 호출이다.
섹션 1:
using Basler.Pylon;
using System;
using System.Drawing;
using System.Drawing.Imaging;
namespace CameraForms
{
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);
}
}
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;
}
}
}
}
섹션 2:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace CameraForms
{
public partial class MainForm : Form
{
baslerCamcs camera = new baslerCamcs();
public MainForm()
{
InitializeComponent();
camera.CameraImageEvent += Camera_CameraImageEvent;
}
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 Unanble()
{
button_stop.Enabled = false;
button_Oneshot.Enabled = false;
button_keepShot.Enabled = false;
}
private void MainForm_Load(object sender, EventArgs e)
{
if (camera.CameraNumber > 0)
camera.CameraInit();
else
{
MessageBox.Show(" ");
Unanble();
}
}
//
private void button_stop_Click(object sender, EventArgs e)
{
camera.Stop();
}
//
private void button_Oneshot_Click(object sender, EventArgs e)
{
camera.OneShot();
}
//
private void button_keepShot_Click(object sender, EventArgs e)
{
camera.KeepShot();
}
// ,
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
camera.DestroyCamera();
}
}
}
효과도:
2019_02_23;
2019_05_08 -> using System이 삭제되었습니다.Linq;
CameraFinder.Enumerate().Count()가 CameraFinder로 수정되었습니다.Enumerate().Count;
using Basler가 추가되었습니다.Pylon;
2019_06_10 ->
1.Basler.Pylon, 이 dll은 Basler 카메라를 설치한 sdk에서만 사용할 수 있습니다.sdk의 C#의 Sample 프로그램을 많이 보십시오. Basler를 보십시오.Pylon 프로젝트
2.만약 네가 나의 코드에 따라 프로그램을 쓴다면, 너의 하드웨어는 문제가 없을 것이다. 그러면 나의 이 코드는 일반적으로 문제가 생기지 않을 것이다.
3.일반적으로 말하면 카메라를 쓸 줄 알고 너는 다른 카메라의 프로그램을 쓸 줄 안다. 나는 basler를 쓴 후에 방성카메라를 쓰고 Crevis카메라를 쓴다. 카메라의 이런 프로그램들은 일반적으로 대동소이하다.전제 조건은 카메라 측이 제공한 sdk에 C#의 인터페이스가 있다는 것이다.
4.이 코드는 비교적 기초적이다.여분의 코드가 있고 하드웨어 트리거 기능이 설치되어 있지 않으며trycatch가 없어서 개선해야 할 부분이 많습니다. 이것들은 여러분에게 맡깁니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C# + Basler 카메라 이미지 수집 DLL다음은 제가 c#로 쓴 basler 카메라의 이미지를 채취하는 프로그램입니다. 여러분께 공유해 드리겠습니다. 두 부분으로 나뉘는데 첫 번째 부분은 DLL 내용이고 두 번째 부분은 호출이다. 섹션 1: 섹션 2: 효과...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.