大华相机C#学习之IDevice类

获取方式

Enumerator.GetDeviceByGigeIP()

        通过IP地址获取设备对象。

private void test_Click(object sender, EventArgs e)
{devices=Enumerator.EnumerateDevices();device = Enumerator.GetDeviceByGigeIP("192.168.0.11");
}

常用属性

 DeviceInfo 

        获取设备的信息、


IsGrabbing

        当前设备如果开启码流捕获,返回true;否则,返回false。


IsOpen

        当前设备打开,返回true;否则,返回false。


IsTriggerOn

        当前设备如果开启触发模式,返回true;否则,返回false。如果此属性为on,那么当码流获取图像时,不需要用户控制,相机一直读取图像;如果需要人为控制,一个信号采集一张图,那么需要将IsTriggerOn设为on,并设置其他参数。此参数可以通过TriggerSet属性获取的ITrigger对象进行控制。

private void button1_Click(object sender, EventArgs e)
{List<IDeviceInfo> devices=Enumerator.EnumerateDevices();IDevice device = Enumerator.GetDeviceByGigeIP("192.168.0.10");Console.WriteLine("------------------------------------------------------------");Console.WriteLine("打开相机前,isTriggerOn属性:"+device.IsTriggerOn);device.Open();Thread.Sleep(100);Console.WriteLine("打开相机后,isTriggerOn属性:" + device.IsTriggerOn);ITrigger trigger=device.TriggerSet;Thread.Sleep(100);Console.WriteLine("------------------------------------------------------------");Console.WriteLine("获取设备trigger对象后");Console.WriteLine("trigger的isOpen属性为"+trigger.IsOpen);Console.WriteLine("device的isTriggerOn属性为"+device.IsTriggerOn);trigger.Close();Thread.Sleep(100);Console.WriteLine("------------------------------------------------------------");Console.WriteLine("执行trigger的close()方法后");Console.WriteLine("trigger的isOpen属性为" + trigger.IsOpen);Console.WriteLine("device的isTriggerOn属性为" + device.IsTriggerOn);trigger.Open(TriggerSourceEnum.Software);Thread.Sleep(100);Console.WriteLine("------------------------------------------------------------");Console.WriteLine("执行trigger的open()方法后");Console.WriteLine("trigger的isOpen属性为" + trigger.IsOpen);Console.WriteLine("device的isTriggerOn属性为" + device.IsTriggerOn);
}运行结果:
------------------------------------------------------------
打开相机前,isTriggerOn属性:False
打开相机后,isTriggerOn属性:True
------------------------------------------------------------
获取设备trigger对象后
trigger的isOpen属性为True
device的isTriggerOn属性为True
------------------------------------------------------------
执行trigger的close()方法后
trigger的isOpen属性为False
device的isTriggerOn属性为False
------------------------------------------------------------
执行trigger的open()方法后
trigger的isOpen属性为True
device的isTriggerOn属性为True

StreamGrabber

        获取设备的取流对象。类型为IStream。


ParameterCollection

        获取相机的配置操作集。


TriggerSet(未理解Open方法参数有哪些)

        获取触发操作集合,返回ITrigger接口,以下为ITrigger接口对象的方法。


 常用方法

ExecuteSoftwareTrigger()        

        执行单帧软触发,执行成功,返回true;否则,返回false。与Device的trigger对象执行ExecuteSoftwareTrigger()方法的效果一样。


GrabUsingGrabLoopThread()

        使用内部线程捕获帧数据。简单点说,就是使用这方法,可以在不获取stream对象的情况下开启码流捕捉,其效果等于stream.Start()。


SaveDeviceCfg(string strFullFileName)

        将相机配置保存到strFullFileName指示的路径上。(需先打开相机,否则,保存失败)

 private void test_Click(object sender, EventArgs e){devices=Enumerator.EnumerateDevices();device = Enumerator.GetDeviceByGigeIP("192.168.0.11");device.Open();int rst=device.SaveDeviceCfg("config.xml");if (rst==0){Console.WriteLine("保存相机配置成功");}else{Console.WriteLine("保存相机配置失败");}device.Close();}运行结果:
保存相机配置成功

LoadDeviceCfg(string strFullFileName,ref List<string> oErrPropertyList)

        从strFullFileName路径的文件读取相机配置到IDevice中,如果成功,返回0;否则,返回其他值。(需先打开相机再读取配置,否则,会失败)

private void test_Click(object sender, EventArgs e)
{List<IDeviceInfo> devices = Enumerator.EnumerateDevices();IDevice device = Enumerator.GetDeviceByGigeIP("192.168.0.11");device.Open();List<string> errorList = new List<string>();int rst=device.LoadDeviceCfg("config.xml",ref errorList);if (rst == 0){Console.WriteLine("加载相机配置成功");}else {Console.WriteLine("加载相机配置失败");}device.Close();
}运行结果:
加载相机配置成功

Open()

        打开相机,如果成功,返回true;否则,返回false。


ShutdownGrab()

        关闭流通道。与stream的Close()方法效果相同。


常用事件

CameraOpened

        当相机打开时,触发该事件。


CameraClosed

        当相机关闭时,触发该事件。

private void test_Click(object sender, EventArgs e)
{List<IDeviceInfo> devices = Enumerator.EnumerateDevices();IDevice device = Enumerator.GetDeviceByGigeIP("192.168.0.11");device.CameraOpened += Device_CameraOpened;device.CameraClosed += Device_CameraClosed;device.Open();device.Close();
}private void Device_CameraClosed(object sender, EventArgs e)
{Console.WriteLine("相机关闭事件触发");
}private void Device_CameraOpened(object sender, EventArgs e)
{Console.WriteLine("相机打开事件触发");
}运行结果:
相机打开事件触发
相机关闭事件触发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/631055.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习部分排序,插入排序,冒泡排序以及希尔排序

1.插入排序 <1>.首先我们举个例子 我们要把6进行前面的插入&#xff0c;那我们要进行比较&#xff0c;首先确定一个end的指针&#xff0c;然后他指向的数字就是我们需要比较的&#xff0c;如果end指向的数比我们end1 的大的话&#xff0c;那我们就往前挪一个&#xff0c…

Docker向harbor上传大镜像的413报错

文章目录 一、背景二、问题三、处理1.调整harbor相关大小2.正向代理的nginx参数 一、背景 最近遇到了个需求&#xff0c;某厂商的系统模块以容器模式部署在我们的内网环境中&#xff0c;厂商为我们提供了一个公网仓库&#xff0c;需要我们自己下载相关镜像。因此&#xff0c;获…

Spring学习(三)——AOP

AOP是在不改原有代码的前提下对其进行增强 AOP(Aspect Oriented Programming)面向切面编程&#xff0c;在不惊动原始设计的基础上为其进行功能增强&#xff0c;前面咱们有技术就可以实现这样的功能即代理模式。Java设计模式——代理模式-CSDN博客 基础概念 连接点&#xff08…

graphviz使用

安装 brew install graphviz测试 https://github.com/martisak/dotnets?tabreadme-ov-file

从Linux角度具体理解程序翻译过程-----预处理、编译、汇编、链接

前言&#xff1a; 在C语言中&#xff0c;我们知道程序从我们所写的代码到可执行执行的过程中经历了以下过程 1.预处理 2.编译 3.汇编 4.链接 可以通过下图来理解 翻译过程 1.预处理 该过程主要进行以下操作&#xff1a; (1)头文件的包含 (2)define定义符号的替换&#xff…

C语言——九九乘法表

直接上代码实现九九乘法表&#xff0c;完整代码如下&#xff1a; #include <stdio.h>int main(){int i,j;for(i1;i<10;i){for(j1;j<i;j){printf("%d*%d%d\t",j,i,i*j);/*printf("%d*%d%-2d",j,i,i*j);*/}printf("\n");}return 0; }…

常用的7个免费ChatGPT网站

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

SpringCloud系列(5)--SpringCloud微服务工程公共部分提取

前言&#xff1a;在上一章节中我们创建了两个个SpringCloud工程&#xff0c;但在两个工程中分别存在着一些重复的部分&#xff0c;例如重复的实体类&#xff08;如图所示&#xff09;&#xff0c;这样会造成系统的冗余&#xff0c;所以我们需要把公共的类提取到一个工程里&…

41、二叉树-二叉树的层序遍历

思路&#xff1a; 层序遍历就是从左到右依次遍历。这个时候就可以使用队列的方式。例如先把头节点入队&#xff0c;然后遍历开始&#xff0c;首先计算队列长度&#xff0c;第一层&#xff0c;长度为了&#xff0c;遍历一次&#xff0c;依次出队&#xff0c;头结点出队&#xff…

Linux的学习之路:13、进程替代

摘要 本章主要是说一下进程替代用到的函数exec以及自己实现的简易shell 目录 摘要 一、进程程序替换 1、替换原理 2 、替换函数 3、函数解释与命令理解 4、代码演示 1、execl 2、execv 3、execlp 4、execvp 二、简易的myshell 三、代码 myshell exec 一、进程…

Ubuntu 22最新dockers部署redis哨兵模式,并整合spring boot的详细记录(含spring boot项目包)

dockers部署redis哨兵模式&#xff0c;并整合spring boot 环境说明相关学习博客一、在docker中安装redis1、下载dockers镜像包和redis配置文件&#xff08;主从一样&#xff09;2、编辑配置文件&#xff08;主从一样&#xff09;3、启动redis&#xff08;主从一样&#xff09;4…

【OpenGL实践08】现代渲染管线在GLUT和Pygame和Qt.QOpenGLWidget上各自的实现代码

Qt.QOpenGLWidget进行现代渲染管线实验效果 一、说明 据说QOpenGLWidget是用来取代QGLWidget的继承者&#xff0c;我们试图将GLUT上的旧代码改成QOpenGLWidget&#xff0c;本以为差别不大&#xff0c;轻易搞定&#xff0c;经实践发现要付出极大努力才能完成。经多次实验发现G…