C#实现调用本机摄像头实例

本文实例源自一个项目,其中需要调用本机的摄像头进行拍照,分享给大家供大家参考之用。具体步骤如下:

硬件环境:联想C360一体机,自带摄像头

编写环境:vs2010

语言:C# WPF


实现步骤:

下载AForge类库,并添加引用:

using AForge;
using AForge.Controls;
using AForge.Video;
using AForge.Video.DirectShow;
using Size = System.Drawing.Size;

在xaml界面中添加VideoSourcePlayer控件,此次稍微解释如何添加外来控件:

在工具箱中添加新的选项卡,右键添加选择项,浏览选择控件dll确定,引用控件即可添加到工具箱中。

枚举所有的摄像头:

FilterInfoCollection videoDevices;
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo device in videoDevices)
{
  //可以做出处理
}

连接摄像头:

声明:

FileterInfo info;
info = videoDevices[0];//选取第一个,此处可作灵活改动
VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[info.MonikerString);
videoSource.DesiredFrameSize = new System.Drawing.Size(214, 281);
videoSource.DesiredFrameRate = 1;
videoSourcePlayer.VideoSource = videoSource;
videoSourcePlayer.Start();

关闭摄像头:

videoSourcePlayer.SignalToStop();
videoSourcePlayer.WaitForStop();

拍照:

if (videoSourcePlayer.IsRunning)
{
  string path = "e:\"
  BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
  videoSourcePlayer.GetCurrentVideoFrame().GetHbitmap(),
  IntPtr.Zero,
  Int32Rect.Empty,
  BitmapSizeOptions.FromEmptyOptions());
  PngBitmapEncoder pE = new PngBitmapEncoder();
  pE.Frames.Add(BitmapFrame.Create(bitmapSource));
  string picName = path + "paizhao" + ".jpg";
  if (File.Exists(picName))
  {
 File.Delete(picName);
  }
  using (Stream stream = File.Create(picName))
  {
 pE.Save(stream);
  }
}

项目中要求是摄像头处于监控状态,拍照后画面固定存储,不满意可以清空再次进行拍照,直到满意为止。

做法是在videoSourcePlayer的上面添加一个image控件,因为项目是WPF做的,所有照片显示只能添加image控件,有两点需要注意:

1)WPF引用winform控件需要使用WindowsFormsHost控件,所以监控视频和照片显示时是控件WindowsFormsHost和image控件的显示和隐藏,此处走了一段弯路所以记录下来。

2)image控件的source已经绑定,但是照片需要清空删除该照片资源,系统提示的大致意思是资源已经被占用无法删除。解决途径:

声明:

BitmapImage bmi = new System.Windows.Media.Imaging.BitmapImage();

使用时:

bmi.BgeinInit();
bmi.UriSource = new Uri(picName);
bmi.CacheOption = BitmapCacheOption.OnLoad;
bmi.EndInit();

绑定:

this.image.Source = bmi;

希望本文所述对于大家的C#程序设计有所帮助。

除声明外,跑步客文章均为原创,转载请以链接形式标明本文地址
  C#实现调用本机摄像头实例

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23585.html

相关内容

C#实现小截屏软件功能

C# 利用IRawPixels接口遍历栅格数据

C#实现JSON字符串序列化与反序列化的方法

C#利用正则判断输入是否为纯数字、容器类


C#编写ActiveX网页截图控件

C#中如何获取文件图标

常用C#正则表达式汇总介绍

C#中异步回调函数用法实例

时间: 2024-10-16 02:42:20

C#实现调用本机摄像头实例的相关文章

C#调用本机摄像头

原文:C#调用本机摄像头 这段时间一个小项目中需要调用本机的摄像头进行拍照,网上搜集了一些资料以及解决的一些小问题,在此记录以便后续使用. 硬件环境:联想C360一体机,自带摄像头 编写环境:vs2010 语言:C# WPF 下载AForge类库,并添加引用: using AForge; using AForge.Controls; using AForge.Video; using AForge.Video.DirectShow; using Size = System.Drawing.Siz

html5调用本机摄像头兼容谷歌浏览器高版本,谷歌浏览器低版本,火狐浏览器

做这个功能的时候在网上查了一些资料,代码如下,在这个代码在谷歌浏览器46版本是没问题的,在火狐浏览器也行,但是在谷歌浏览器高版本下是不兼容的 <div id="body"> <section class="featured"> <div class="content-wrapper"> <hgroup class="title"> <h1>Welcome to web

directshow 虚拟摄像头 实例 代码解读

directshow 虚拟摄像头 实例 代码解读 本文只介绍这个源码的大致构成以及怎么修改,因为其他的我也不会啊哈哈哈,我就是用QQ调用虚拟摄像头读取我自己的视频或者图片播放给别人让别人以为这就是实时的而已. 1,示例代码:QQ可用 Directshow实现的虚拟摄像头(win10+vs2013,c++代码)    没有积分的又需要代码可以邮件找我[email protected] 2,源码说明 此源码包含了directshow的库文件,相关配置文件也保存在工程中,可以直接运行,不需要额外安装D

子窗口调用父页面js实例

父页面代码: <%@ page contentType="text/html; charset=GBK"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <title>new_page_title</title> <script type="

Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享

Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享 2014-09-09 14:14:25 标签:会话共享 主从 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lovelace.blog.51cto.com/1028430/1550198 ### keepalived配置 ### nginx安装培训 - 安装nginx 1 2 3 ``` cpp yum install nginx -y `

构建一机多实例tomcat集群

1.了解tomcat Tomcat不是一个完整意义上的Jave EE(j2ee)服务器,因为它没有提供完整的Java EE企业应用平台的API.但是由于Tomcat遵循apache开源协议,并且对当前Java开发框架开源组件Structs.Spring和Hibernate等实现完美支持,因此tomcat被众多企业用来部署配置众多的Java应用程序,实现替代一些商业的Java应用服务器. 2.Tomcat的目录结构 要部署使用tomcat,则必须了解tomcat的目录结构以及各目录的作用.这里以t

mysql一机多实例安装记录

因为想研究mycat,所以需要安装多个mysql实例进行研究.限于没有多于计算机,只能在本机安装了.通过mysql文档,自己琢磨着安装成功! 目录结构如下: 其中one和two文件夹用来模拟数据库分库. 操作步骤: 拷贝文件 拷贝mysql-5.7.9-win64目录下的my-default.ini分别到whole.one.two目录下,更名为my.init. 以whole库 为例说明,one库和two库做相应调整即可. 1.编写\instance\whole\my.init innodb_bu

python+opencv 电脑调用手机的摄像头

移动端下载一个工具:IP摄像头(app) Android的下载地址:http://app.mi.com/details?id=com.shenyaocn.android.WebCam 下载安装后,打开app后,点击下方的"打开IP摄像头服务器"(连上wifi,确保电脑与手机处在同一局域网内). 然后,使用python进行opencv代码调用部分: import cv2 cv2.namedWindow("camera",1) #开启ip摄像头 video="

调用存储过程进行分页实例

我在这使用SQL server数据库和我已有的数据库中的表.表名: HKSJ_Main 1.创建存储过程 --该分页的原理 越过多少条,去多少条 create proc P_page --声明参数@size int , --一页取几条@pageindex int,--取第几页@total int out --返回总条数as beginselect top(@size)* from dbo.HKSJ_Main as B where B.ID not in ( select top((@pagein