using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using ThridLibray;namespace _1_5相机SDK图像采集
{public class Camera{List<IGrabbedRawData> m_frameList = new List<IGrabbedRawData>();        /* 图像缓存列表 */Thread renderThread = null;         /* 显示线程  */bool m_bShowLoop = true;            /* 线程控制变量 */Mutex m_mutex = new Mutex();        /* 锁,保证多线程安全 */public event Action<Bitmap> NewImage;public Camera(){if (null == renderThread){renderThread = new Thread(new ThreadStart(ShowThread));renderThread.IsBackground = true;renderThread.Start();}}/* 转码显示线程 */private void ShowThread(){while (m_bShowLoop){if (m_frameList.Count == 0){Thread.Sleep(1);continue;}/* 图像队列取最新帧 */m_mutex.WaitOne();IGrabbedRawData frame = m_frameList.ElementAt(0);m_frameList.RemoveAt(0);m_frameList.Clear();m_mutex.ReleaseMutex();/* 主动调用回收垃圾 */GC.Collect();try{/* 图像转码成bitmap图像 */var bitmap = frame.ToBitmap(false);if (NewImage!=null){NewImage(bitmap);}}catch (Exception exception){Catcher.Show(exception);}}}/* 设备对象 */private IDevice m_dev;/* 相机打开回调 */private void OnCameraOpen(object sender, EventArgs e){MessageBox.Show("相机已打开!");}/* 相机关闭回调 */private void OnCameraClose(object sender, EventArgs e){MessageBox.Show("相机已关闭!");}/* 相机丢失回调 */private void OnConnectLoss(object sender, EventArgs e){m_dev.ShutdownGrab();m_dev.Dispose();m_dev = null;}public void btnOpen(){try{/* 设备搜索 */List<IDeviceInfo> li = Enumerator.EnumerateDevices();if (li.Count > 0){/* 获取搜索到的第一个设备 */m_dev = Enumerator.GetDeviceByIndex(0);/* 注册链接事件 */m_dev.CameraOpened += OnCameraOpen;m_dev.CameraClosed += OnCameraClose;/* 打开设备 */if (!m_dev.Open()){MessageBox.Show(@"连接相机失败");return;}/* 打开Software Trigger */m_dev.TriggerSet.Open(TriggerSourceEnum.Software);/* 设置图像格式 */using (IEnumParameter p = m_dev.ParameterCollection[ParametrizeNameSet.ImagePixelFormat]){p.SetValue("Mono8");}/* 设置曝光 */using (IFloatParameter p = m_dev.ParameterCollection[ParametrizeNameSet.ExposureTime]){p.SetValue(1000);}/* 设置增益 */using (IFloatParameter p = m_dev.ParameterCollection[ParametrizeNameSet.GainRaw]){p.SetValue(1.0);}/* 设置缓存个数为8(默认值为16) */m_dev.StreamGrabber.SetBufferCount(8);/* 注册码流回调事件 */m_dev.StreamGrabber.ImageGrabbed += OnImageGrabbed;/* 开启码流 */if (!m_dev.GrabUsingGrabLoopThread()){MessageBox.Show(@"开启码流失败");return;}}}catch (Exception exception){Catcher.Show(exception);}}/* 码流数据回调 */private void OnImageGrabbed(Object sender, GrabbedEventArgs e){m_mutex.WaitOne();m_frameList.Add(e.GrabResult.Clone());m_mutex.ReleaseMutex();}/* 停止码流 */public void btnClose(){try{if (m_dev == null){throw new InvalidOperationException("Device is invalid");}m_dev.StreamGrabber.ImageGrabbed -= OnImageGrabbed;         /* 反注册回调 */m_dev.ShutdownGrab();                                       /* 停止码流 */m_dev.Close();                                              /* 关闭相机 */}catch (Exception exception){Catcher.Show(exception);}}/* 窗口关闭 */public void OnClosed(EventArgs e){if (m_dev != null){m_dev.Dispose();m_dev = null;}m_bShowLoop = false;renderThread.Join();}/* 执行软触发 */public void SoftwareTrigger(){if (m_dev == null){throw new InvalidOperationException("Device is invalid");}try{m_dev.ExecuteSoftwareTrigger();}catch (Exception exception){Catcher.Show(exception);}}}
}

转载于:https://www.cnblogs.com/BKYZFSN/p/11027417.html

C# 大华相机图像采集相关推荐

  1. 使用大华NetSDK对接大华相机

    使用大华NetSDK对接相机 一. 下载大华NetSDK support 根据自己的需要下载对应版本的sdk.这边我们就以Win32版本作为开发使用. 下载的文件解压后,内部文件如下图所示: 开发使用 ...

  2. 1.8安装大华相机SDK及测试

    不同工业相机的sdk不同,可以到相应的官网下载,我使用的是大华相机 下载SDK: 官方下载地址:http://download.huaraytech.com/pub/sdk/ 我使用的是2.2.5的L ...

  3. C#调用大华相机SDK获取图片,转换成VisionPro的Icogimage格式

    文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程.在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项 ...

  4. 大华相机IP网段更新配置

    大华相机在出厂后一般都会对应一个IP,如192.169.1.XX.实际项目中,为了将相机放到与wifi相同的频段,一般需要更改相机的IP和网关,使之与wifi处于相同频段,那么就可以在wifi覆盖的所 ...

  5. 大华相机接入web页面实现人脸识别

    先看下效果,中间主视频流就是大华相机(视频编码H.264),海康相机(视屏编码H.265) 前端接入视屏流代码 <!--视频流--><div id="col2"& ...

  6. 杭州大华相机 rtsp 流格式

    杭州大华(Dahua)相机的 RTSP(Real-Time Streaming Protocol)流格式一般遵循以下结构: rtsp://[username]:[password]@[camera_i ...

  7. Unity调用大华相机SDK采集图像及基本功能设定

    unity平台对视频播放不是很友好,而大华的SDK只有c#版本的并没有专门为unity做出来SDK,最开始尝试过使用SDK里面的方式获取YUV格式的视频流,再讲YUV格式的视频流转换为unity可以播 ...

  8. 大恒相机图像采集 linux+python

    运行环境: Ubuntu18.04, 大恒相机python库,大恒相机linux驱动,python2.7 代码: import gxipy as gx from PIL import Image im ...

  9. 海康大华相机rtsp

    海康: rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream 说明: username: 用户名 ...

  10. 大华与巴斯勒相机实现单拍的不同

    1.巴斯勒相机:直接抓取图片 2.大华相机:需要停止抓取之后再开始抓取单独的图片

最新文章

  1. Vue中插入HTML代码的方法
  2. r.java没有生成_r.java文件没有生成
  3. Flink从入门到精通100篇(二十一)-万字长文详解 Flink 中的 CopyOnWriteStateTable
  4. ElasticSearch重启之后shard未分配问题的解决
  5. c# mysql 插入 和 查询_C#对数据库的操作(增删改查)
  6. Docker 容器的常用命令
  7. 多个基因集富集结果泡泡图绘制展示
  8. js 学习笔记(一)
  9. 两台主机经过路由器传送数据的网络原理
  10. 逆序对算法c语言,归并排序求逆序对的代码(C语言)
  11. 高频交易的思路模型简介
  12. python切片详解_python切片及sys.argv[]用法详解
  13. 汇编Masm更改颜色
  14. win7取消计算机密码怎么设置,win7开机密码怎么取消
  15. 使照片带有妙的电影色彩55款工具套件的lr微妙的电影调色预设
  16. 关于TCP/IOCP构架中出现的假死连接解决方案
  17. Web应用程序 [/XXX_war_exploded] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它。
  18. 怎么把好几行弄成一行_将多行内容合并成一行的两种方式
  19. PHP实现RSA算法
  20. win10 UEFI+BMR无损改为UEFI+GPt

热门文章

  1. 离散数学第六版第er章偶数题答案_离散数学答案(尹宝林版)第二章习题解答
  2. iOS测试包安装途径实践
  3. CAT8八类网线标准、测试与应用
  4. dll反编译工具java_JAVA反编译工具的使用
  5. CEIWEI CommMonitor 串口监控精灵v12.0 串口过滤;串口监控;Serial port monitor tools
  6. 1301_两种方式为开发板增加串口监控功能
  7. PG数据库表及表注释查询语句
  8. arduino 智能车组装步骤_Arduino 智能避障智能小车制作图文教程
  9. 用 Javascript 生成二维码
  10. 计算机系统基础-袁春风老师-mooc-第二章测试习题及解析