zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    }
    
    
  • 相关阅读:
    《Effective Java》第9章 异常
    《Effective Java》第7章 方法
    《Effective Java》第6章 枚举和注解
    《Effective Java》第5章 泛型
    《Effective Java》第4章 类和接口
    《Effective Java》第3章 对于所有对象都通用的方法
    使用Spring加载properties配置文件.md
    第7章 插件的使用和写法
    第6章 jQuery与Ajax的应用
    第5章 jQuery对表单、表格的操作及更多应用
  • 原文地址:https://www.cnblogs.com/aqyl/p/12403003.html
Copyright © 2011-2022 走看看