当前位置: 首页 > news >正文

【03】大恒相机SDK C#开发 —— 回调采集图像,关闭相机

文章目录

  • 1 回调采集图像、
    • 1.1 创建回调函数
    • 1.2 注册回调函数
    • 1.3 运行测试
  • 2 停止采集和关闭相机
  • 3 视频教程

在上一讲,基础上继续修改代码:

1 回调采集图像、

1.1 创建回调函数

//创建回调函数
//其中回调函数中包含一个自定义变量和一个图像数据

        //创建回调函数//其中回调函数中包含一个自定义变量和一个图像数据public static void _CallCaptureBack(object userParam, IFrameData frameData){//获取并打印图像宽高ulong height = frameData.GetHeight();ulong width = frameData.GetWidth();Console.WriteLine("图像高:" + height.ToString() + "宽 :" + width.ToString());}

回调函数创建完成后,需要在相机流对象中进行注册;

void RegisterCaptureCallback(object objUserParam, CaptureDelegate delCaptureFun);

1.2 注册回调函数

需要注意的是,注册回调函数需要在流通道开始采集之前进行;
自定义参数可以是任意参数,调第二个参数则为刚才创建的回调函数;

    //注册回调函数//RegisterCaptureCallback(,)自定义参数可以是任意参数,调第二个参数则为刚才创建的回调函数;cam_stream.RegisterCaptureCallback(cam,_CallCaptureBack);

1.3 运行测试

在这里插入图片描述
完整代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GxIAPINET;namespace DaHC_
{internal class Program{static void Main(string[] args){//首先,找到相机//第一步,对相机资源进行初始化IGXFactory.GetInstance().Init();//第二部,枚举相机//先定义一个设备列表,用来存放枚举到的设备List<IGXDeviceInfo> iGXDeviceInfos = new List<IGXDeviceInfo>();//枚举同一网段下的相机 无ALLIGXFactory.GetInstance().UpdateDeviceList(1000,iGXDeviceInfos);//枚举同一网络下所有相机 有ALL//IGXFactory.GetInstance().UpdateAllDeviceList(1000, iGXDeviceInfos);//第三步,获取相机信息,如IP、ID、SN等//枚举到相机后,就可以获取到相机的一些设备信息string IP = iGXDeviceInfos[0].GetIP();string ID = iGXDeviceInfos[0].GetSN();string SN = iGXDeviceInfos[0].GetSN(); Console.WriteLine("第一个设备的IP:"+ IP);Console.WriteLine("第一个设备的ID:"+ ID);Console.WriteLine("第一个设备的SN:"+ SN);//第四步,打开相机,可以通过IP、SN、MAC、ID等唯一标识符打开相机//这里通过SN打开相机,打开相机的方式有三种: 只读、控制、独占IGXDevice cam = IGXFactory.GetInstance().OpenDeviceBySN(SN, GX_ACCESS_MODE.GX_ACCESS_CONTROL);//控制方式打开//第五步,打开相机后,准备开始采集图像//首先打开流通道//uint cam_num = cam.GetStreamCount();IGXStream cam_stream = cam.OpenStream(0);//默认打开第一个流通道   //注册回调函数//RegisterCaptureCallback(,)自定义参数可以是任意参数,调第二个参数则为刚才创建的回调函数;cam_stream.RegisterCaptureCallback(cam,_CallCaptureBack);//流通道开始采集cam_stream.StartGrab();//获取远端属性控制器IGXFeatureControl cam_remote_control = cam.GetRemoteFeatureControl();//发送开采命令,设备参数字符串可以去文档里查看cam_remote_control.GetCommandFeature("AcquisitionStart").Execute();}//创建回调函数//其中回调函数中包含一个自定义变量和一个图像数据public static void _CallCaptureBack(object userParam, IFrameData frameData){//获取并打印图像宽高ulong height = frameData.GetHeight();ulong width = frameData.GetWidth();Console.WriteLine("图像高:" + height.ToString() + "宽 :" + width.ToString());}}
}

2 停止采集和关闭相机

  • 停止采集和开始采集的方法是相同的;区别只在于发送的字符命令不同;

  • 关闭相机首先需要先停止流采集;再注销前面所注册的所有回调函数;

  • 最后记得通过反初始化释放所有资源;

//停止采集和关闭相机
//关闭相机首先需要先停止流采集;再注销前面所注册的所有回调函数;

    //停止采集和关闭相机//关闭相机首先需要先停止流采集;再注销前面所注册的所有回调函数;//关闭采集命令cam_remote_control.GetCommandFeature("AcquisitionStop").Execute();//关闭流通道cam_stream.StopGrab();//关闭回调函数cam_stream.UnregisterCaptureCallback();//最后通过反初始化释放所有资源;IGXFactory.GetInstance().Uninit();

需要打断点,运行后,按F0 调试,才可以看到 图像输出 宽、高;

否则,运行一闪而过就没了;还没来的及输出,流就被关闭了,输出窗口也会变关闭;
在这里插入图片描述
完整代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GxIAPINET;namespace DaHC_
{internal class Program{static void Main(string[] args){//首先,找到相机//第一步,对相机资源进行初始化IGXFactory.GetInstance().Init();//第二部,枚举相机//先定义一个设备列表,用来存放枚举到的设备List<IGXDeviceInfo> iGXDeviceInfos = new List<IGXDeviceInfo>();//枚举同一网段下的相机 无ALLIGXFactory.GetInstance().UpdateDeviceList(1000,iGXDeviceInfos);//枚举同一网络下所有相机 有ALL//IGXFactory.GetInstance().UpdateAllDeviceList(1000, iGXDeviceInfos);//第三步,获取相机信息,如IP、ID、SN等//枚举到相机后,就可以获取到相机的一些设备信息string IP = iGXDeviceInfos[0].GetIP();string ID = iGXDeviceInfos[0].GetSN();string SN = iGXDeviceInfos[0].GetSN(); Console.WriteLine("第一个设备的IP:"+ IP);Console.WriteLine("第一个设备的ID:"+ ID);Console.WriteLine("第一个设备的SN:"+ SN);
//打开相机//第四步,打开相机,可以通过IP、SN、MAC、ID等唯一标识符打开相机//这里通过SN打开相机,打开相机的方式有三种: 只读、控制、独占IGXDevice cam = IGXFactory.GetInstance().OpenDeviceBySN(SN, GX_ACCESS_MODE.GX_ACCESS_CONTROL);//控制方式打开//准备开始采集图像//第五步,打开相机后,准备开始采集图像//首先打开流通道//uint cam_num = cam.GetStreamCount();IGXStream cam_stream = cam.OpenStream(0);//默认打开第一个流通道   //注册回调函数//RegisterCaptureCallback(,)自定义参数可以是任意参数,调第二个参数则为刚才创建的回调函数;cam_stream.RegisterCaptureCallback(cam,_CallCaptureBack);//流通道开始采集cam_stream.StartGrab();//获取远端属性控制器IGXFeatureControl cam_remote_control = cam.GetRemoteFeatureControl();//发送开采命令,设备参数字符串可以去文档里查看cam_remote_control.GetCommandFeature("AcquisitionStart").Execute();//停止采集和关闭相机//关闭相机首先需要先停止流采集;再注销前面所注册的所有回调函数;//关闭采集命令cam_remote_control.GetCommandFeature("AcquisitionStop").Execute();//关闭流通道cam_stream.StopGrab();//关闭回调函数cam_stream.UnregisterCaptureCallback();//最后通过反初始化释放所有资源;IGXFactory.GetInstance().Uninit();}//创建回调函数//其中回调函数中包含一个自定义变量和一个图像数据public static void _CallCaptureBack(object userParam, IFrameData frameData){//获取并打印图像宽高ulong height = frameData.GetHeight();ulong width = frameData.GetWidth();Console.WriteLine("图像高:" + height.ToString() + "宽 :" + width.ToString());}}
}

3 视频教程

【大恒工业相机SDK开发C#版】回调采集图像,关闭相机

http://www.lryc.cn/news/605479.html

相关文章:

  • Java WEB技术-序列化和反序列化认识(SpringBoot的Jackson序列化行为?如何打破序列化过程的驼峰规则?如何解决学序列化循环引用问题?)
  • 学习笔记《区块链技术与应用》第三天 网络 难度
  • 详解分布式数据库缓存技术:高性能数据访问的基石
  • 如何在 macOS 上使用 dnsmasq 搭建本地 DNS 缓存/转发
  • 深度解析:基于Python构建的闲鱼自动化营销与信息发送机器人
  • IO流专题
  • linux运维学习第十三周
  • Linux 服务器性能优化:性能监控,系统性能调优,进程优先级,内核升级全解析
  • 前端框架Vue3(二)——Vue3核心语法之OptionsAPI与CompositionAPI与setup
  • AWS云安全审计终极实战指南:构建自动化安全防线
  • 数字化应急预案:构筑现代安全防线
  • Web3:在 VSCode 中使用 Vue 前端与已部署的 Solidity 智能合约进行交互
  • 从渠道渗透到圈层渗透:开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新路径研究
  • 【09】大恒相机SDK C#开发 ——库函数 IntPtr ConvertToRGB24详细解释 及 示例
  • 【JEECG】JVxeTable表格拖拽排序功能
  • 动态规划Day5学习心得
  • python的异步、并发开发
  • (C++)C++类和类的方法(基础教程)(与Python类的区别)
  • C++提高编程学习--模板
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-50,(知识点:TCP/IP 模型)
  • 磁盘IO优先级控制对美国服务器存储子系统的调优验证
  • 02 基于sklearn的机械学习-KNN算法、模型选择与调优(交叉验证、朴素贝叶斯算法、拉普拉斯平滑)、决策树(信息增益、基尼指数)、随机森林
  • 【动态规划 | 多状态问题】动态规划求解多状态问题
  • YOLO---01目标检测基础
  • windows环境下MySQL 8.0 修改或重置密码
  • Mybatis分页查询当前页数据条数大于实际返回的数据条数
  • 7.5将模块分离到不同的文件中
  • 【JEECG】BasicTable单元格编辑,插槽添加下拉组件样式错位
  • 跳跃表可视化深度解析:动态演示数据结构核心原理
  • Docker-01.Docker课程介绍