日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

C# Basler相机接口二次封装与调用

發布時間:2023/12/13 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 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;
        }
    }
}

總結

以上是生活随笔為你收集整理的C# Basler相机接口二次封装与调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。