winform调用大华相机

本文介绍了如何在WinForm应用中使用C#对大华相机的SDK进行封装,以方便后续开发。主要步骤包括引用大华相机的DLL文件,调用SDK API,根据文本文件或参数确定相机数量,并实现了连续取像、软触发和硬触发单帧取像等功能。代码已在VS2019环境下测试通过。
摘要由CSDN通过智能技术生成

对大华相机官方提供的SDK封装成类以便后期开发调用

首先引用大华相机的dll文件

  1. CLIDelegate.dll
  2. ThridLibray.dll

在类里面引入ThridLibray后,开始调用SDK提供的API实现需要的功能
我根据txt文本里面的相机个数(cameranum)来判断有多少个相机,也可把读取外部配置文件的代码段注释掉,通过内部传参来定义相机个数
话不多说,直接上代码(该代码在X64下面运行)。以下这段代码已多相机为例(上限6个)
包含的功能:

  1. 连续取像
  2. 软触发单帧取像
  3. 硬触发单帧取像
  4. 关闭开启相机时所开启的线程

编译环境是VS2019,亲测可用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using ThridLibray;

namespace BinocularVision
{
   
    class Dahua
    {
   
        class Xiangji
        {
   
            List<IGrabbedRawData> m_frameList1 = new List<IGrabbedRawData>();        /* 图像缓存列表 */
            List<IGrabbedRawData> m_frameList2 = new List<IGrabbedRawData>();        /* 图像缓存列表 */
            List<IGrabbedRawData> m_frameList3 = new List<IGrabbedRawData>();        /* 图像缓存列表 */
            List<IGrabbedRawData> m_frameList4 = new List<IGrabbedRawData>();        /* 图像缓存列表 */
            List<IGrabbedRawData> m_frameList5 = new List<IGrabbedRawData>();        /* 图像缓存列表 */
            List<IGrabbedRawData> m_frameList6 = new List<IGrabbedRawData>();        /* 图像缓存列表 */


            Thread renderThread1 = null;         /* 显示线程  */
            Thread renderThread2 = null;         /* 显示线程  */
            Thread renderThread3 = null;         /* 显示线程  */
            Thread renderThread4 = null;         /* 显示线程  */
            Thread renderThread5 = null;         /* 显示线程  */
            Thread renderThread6 = null;         /* 显示线程  */



            bool m_bShowLoop1 = true;            /* 线程控制变量 */
            bool m_bShowLoop2 = true;            /* 线程控制变量 */
            bool m_bShowLoop3 = true;            /* 线程控制变量 */
            bool m_bShowLoop4 = true;            /* 线程控制变量 */
            bool m_bShowLoop5 = true;            /* 线程控制变量 */
            bool m_bShowLoop6 = true;            /* 线程控制变量 */




            Mutex m_mutex1 = new Mutex();        /* 锁,保证多线程安全 */
            Mutex m_mutex2 = new Mutex();        /* 锁,保证多线程安全 */
            Mutex m_mutex3 = new Mutex();        /* 锁,保证多线程安全 */
            Mutex m_mutex4 = new Mutex();        /* 锁,保证多线程安全 */
            Mutex m_mutex5 = new Mutex();        /* 锁,保证多线程安全 */
            Mutex m_mutex6 = new Mutex();        /* 锁,保证多线程安全 */


            //重载主窗体
            public Xiangji(FormMain formMain)
            {
   
                FormMain = formMain;
            }

            public FormMain FormMain {
    get; set; }

            /// <summary>
            /// 读取相机配置文件
            /// </summary>
            /// <param name="path"></param>
            /// <param name="Rsutlttxt"></param>
            public void cameratxtduqu(string path, ref string[] Rsutlttxt)
            {
   
                //  MessageBox.Show(path);
                string readline;
                string[] readtxt = new string[100];
                if (System.IO.File.Exists(path) == false)
                {
   
                    MessageBox.Show("相机配置文件不存在");
                    return;
                }
                StreamReader reader = new StreamReader(path, System.Text.Encoding.UTF8);
                int M = 0;
                while (reader.Peek() >= 0)
                {
   
                    readline = reader.ReadLine();
                    if (readline != "")
                    {
   
                        M++;
                        readtxt[M] = readline;
                    }
                }

                int Cameranum = Convert.ToInt32(readtxt[1].Substring(7, 1));

                Rsutlttxt[1] = readtxt[1].Substring(7, 1);//返回相机个数
                try
                {
   
                    for (int i = 1; i < Cameranum + 1; i++)
                    {
   
                        Rsutlttxt[i + 1] = readtxt[i + 1].Substring(8, readtxt[i + 1].Length - 8);     //触发模式            
                        Rsutlttxt[1 + i + Cameranum] = readtxt[i + 1 + Cameranum].Substring(11, readtxt[i + 1 + Cameranum].Length - 11);//相机品牌
                        Rsutlttxt[1 + i + 2 * Cameranum] = readtxt[i + 1 + 2 * Cameranum].Substring(6, readtxt[i + 1 + 2 * Cameranum].Length - 6);// 相机Width
                        Rsutlttxt[1 + i + 3 * Cameranum] = readtxt[i + 1 + 3 * Cameranum].Substring(6, readtxt[i + 1 + 3 * Cameranum].Length - 6);//相机Height
                    }
                }
                catch
                {
   
                    MessageBox.Show("配置文件错误!");
                }
            }//读取相机配置文件   

            private IDevice[] m_dev = new IDevice[6];

            /* 相机打开回调 */
            private void OnCameraOpen1(object sender, EventArgs e)
            {
   
                FormMain.Invoke(new Action(() =>
                {
   
                    // FormMain.tsmSingleframeimaging
                }));
            }

            /* 相机关闭回调 */
            private void OnCameraClose1(object sender, EventArgs e)
            {
   

            }


            /* 相机丢失回调 */
            private void OnConnectLoss1(object sender, EventArgs e)
            {
   
                //m_dev[0].ShutdownGrab();
                //m_dev[0].Dispose();
                //m_dev[0] = null;

            }

            private void OnCameraOpen2(object sender, EventArgs e)
            {
   

            }

            /* 相机关闭回调 */
            private void OnCameraClose2(object sender, EventArgs e)
            {
   

            }


            /* 相机丢失回调 */
            private void OnConnectLoss2(object sender, EventArgs e)
            {
   
                // m_dev.ShutdownGrab();
                //  m_dev.Dispose();
                //  m_dev = null;//

            }
            private void OnCameraOpen3(object sender, EventArgs e)
            {
   

            }

            /* 相机关闭回调 */
            private void OnCameraClose3(object sender, EventArgs e)
            {
   

            }


            /* 相机丢失回调 */
            private void OnConnectLoss3(object sender, EventArgs e)
            {
   
                // m_dev.ShutdownGrab();
                //  m_dev.Dispose();
                //  m_dev = null;//

            }

            private void OnCameraOpen4(object sender, EventArgs e)
            {
   

            }

            /* 相机关闭回调 */
            private void OnCameraClose4(object sender, EventArgs e)
            
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值