软件c#语言调用摄像头,C#调用摄像头的几种方式
C#调用摄像头的方式
本文将讲诉在C#的winform程序中如何调用摄像头:
1.调用USB摄像头
2.调用普通IP摄像头
3.通过摄像头SDK进行调用
使用的DLL
首先给上我所使用的DLL
调用USB摄像头
调用USB摄像头其实比较简单,就是通过读取电脑自身所拥有的设备数,再执行预览。
videoSourcePlayer是AForge中的控件。
private FilterInfoCollection videoDevices;
this.videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (this.videoDevices.Count > 0)
{
VideoCaptureDevice source = new VideoCaptureDevice(this.videoDevices[0].MonikerString);
this.videoSourcePlayer.SignalToStop();
this.videoSourcePlayer.WaitForStop();
this.videoSourcePlayer.VideoSource = source;
this.videoSourcePlayer.Start();
}
调用普通IP摄像头
首先要确认HTTP方式传送的图片的地址,我用的SAMSUN地址是http://{0}/cgi-bin/video.cgi?msubmenu=jpg,还有其他的http://{0}/axis-cgi/jpg/image.cgi?camera=1
使用JPEGStream或者MJPEGStream,有用户名和密码的就加上。有了source其他的和上面USB一样。
JPEGStream source = new JPEGStream(URL);
//MJPEGStream source = new MJPEGStream(URL);
source.Login = username;
source.Password = password;
this.OpenVideoSource(source);
通过摄像头SDK进行调用
这个调用还是很简单的,一般都是使用控件的Handle来进行预览的,我们可能会想取每一帧的图片,那么如何取得每一帧呢?因为是通过Handle来预览的所以控件中无法取得,我们需要调用摄像头SDK的获取每一帧的接口,但是这个接口是直接将图片保存到本地的,感觉巨坑有木有。不过我们还是有方法处理的。下面是我对三星摄像头的处理:
public override Bitmap CapturePicture()
{
Bitmap bitmap = null;
string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Templates) + @"\SAMSUNG_CapturePicture.bmp";
if (File.Exists(path))
{
File.Delete(path);
}
if (SSNetSDK.XNS_DEV_SaveSnapshot(playHandle, path,0))
{
using (MemoryStream stream = new MemoryStream(File.ReadAllBytes(path)))
{
bitmap = (Bitmap)Image.FromStream(stream);
}
File.Delete(path);
}
return bitmap;
}
软件c#语言调用摄像头,C#调用摄像头的几种方式相关推荐
- linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式
主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...
- c语言返回二叉树的大小,C语言中计算二叉树的宽度的两种方式
C语言中计算二叉树的宽度的两种方式 二叉树作为一种很特殊的数据结构,功能上有很大的作用!今天就来看看怎么计算一个二叉树的最大的宽度吧. 采用递归方式 下面是代码内容: int GetMaxWidth( ...
- C语言的二维数组初始化的几种方式介绍(私藏大数组初始化方式)
C语言的二维数组初始化的几种方式介绍 1.直接赋值 2.循环对每个元素赋值 3.借用memset/memset_s初始化为0或-1 4.`数组所有元素初始化为相同值(用于大数组初始化贼方便)` 1.直 ...
- C语言中存储多个字符串的两种方式
C语言中存储多个字符串的两种方式 方式一 二维字符串数组 声明: char name[4][10] = { "Justinian", "Momo", " ...
- C++中调用DLL中的函数的两种方式
一.DLL源文件: extern "C" __declspec(dllexport) int add(int a, int b) {return a + b; } 二.静态调用: ...
- 在 Shell 脚本中调用另一个 Shell 脚本的三种方式
先来说一下主要以下有几种方式: fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. exec: exec path/to/foo.sh s ...
- 以太坊智能合约交互调用,web3.js,web3j两种方式实现
导语 接上篇文章 <使用hardhat部署solidity智能合约到测试网> 部署完合约之后,那么如何区块链进行交互呢?这节的主要内容就是使用web3.js和web3j来与区块链以及链上的 ...
- C语言实现链表的逆序的几种方式
文章目录 通过头插法实现的 通过双指针实现链表的逆序 通过栈来实现的 通过递归来实现 通过头插法实现的 1.通过头插法(两条链表)来实现的.通过遍历原来的链表,将遍历得到的每一个节点都插入到新链表的头 ...
- Java调用.Net的web service的几种方式
最近做项目,涉及到web-service调用,现学了一个星期,现简单的做一个小结.下面实现的是对传喜物流系统( http://vip.cxcod.com/PodApi/GetPodStr.asmx?w ...
- java new class 直接调用_java中创建对象的的两种方式具体解释,一个是new一个是调用Class类的newinstance方法?...
展开全部 1.new 使用java的关键字new来创建对象实例.构造函数链中的所有构造函数都32313133353236313431303231363533e78988e69d833133333739 ...
最新文章
- 定制Apache索引样式
- 连接远程数据库ORACLE11g,错误百出!
- 如何在国内跑Kubernetes的minikube
- 常用知识总结——模板Template
- uniapp 开发h5 优化加载速度
- logging模块(二十六)
- 服务器双硬盘系统安装系统安装,固态机械混合安装教程!双硬盘安装系统的方法...
- 使用Arduino Pro Mini和BC95-B5连接物联网
- 会计与计算机融合的会计论文,管理会计与财务会计融合浅析论文
- sql 创建学生表 课程表 成绩表
- python后端 工作 知乎_[Python]知乎后端实习生面试心得
- python提取电子发票_Python办公自动化—电子发票台账制作自动化(3)
- 学生信息管理系统代码全篇
- DockOne微信分享(一三四):国内某大型酒店管理集团基于Kubernetes的实践
- 基于MATLAB的农业病虫害识别系统
- Swift5.1 语言指南(三) 快速之旅
- 分享一个前两天写的自动监控blocking 的脚本(基于12C)
- 【我的生活】旅游计划--2019
- matlab二维、三维矩阵转换、排序、转置等问题
- 使用while循环方式打印100以内4的倍数(while中加if)、使用while循环方式计算2+4+6+8+...+100、编写程序“从键盘读入个数不正确的整数,并判断读入的正数和负数的个数
热门文章
- how is OData url select option implemented in the backend
- 推荐一个免费的在线图片工具网站
- 通过调试获得SAP Fiori gateway系统的系统ID
- 如何处理APF框架的错误消息:Filter is too complex error
- SAP Fiori Launchpad launchpad Designer组件和configuration组件的重要存储表一览
- Cloud for Customer Mashup debug in IFrame
- 什么是工资单上的variable pay mix?
- python数据分析图表展示_1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源...
- linux防火墙没看3306访问不,Linux配置防火墙,开启80端口、3306端口
- 平衡树-Treap基础内容