C#关于摄像头的使用

转载 2015年07月07日 10:22:22

下载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#使用摄像头拍照

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using...
  • malongning
  • malongning
  • 2007年01月16日 16:09
  • 4143

C#代码调用摄像头

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W...
  • u010771437
  • u010771437
  • 2015年05月10日 08:55
  • 1888

c#调用笔记本摄像头并使用tcp传输图像

等会再写
  • yutuyinchan
  • yutuyinchan
  • 2016年09月22日 17:49
  • 318

C#学习之 调用 AForge.NET Framework 启动摄像头

今天开始捣鼓C#启动摄像头,之前做过用 C++调用OPENCV库启动摄像头,C#理论上也可以。 但是看了    这篇博文笔记, 顿时脑洞大开,原来可以和摄像头打交道的库有这么多啊。之前,我就直到O...
  • HK_5788
  • HK_5788
  • 2015年10月22日 00:30
  • 5303

C#简单的Aforge调用摄像头

突然了解到了Aforge这个类能实现许多人工智能、图像视频处理、神经算法等等功能, 就想接触一下这个类,网络上使用它的程序也挺多, 看了一些相关类的使用之后, 便写了个调用摄像头的小程序  us...
  • u014328876
  • u014328876
  • 2015年11月15日 09:50
  • 1634

C# 使用AForge调用笔记本摄像头拍照

本人转载博客http://www.cnblogs.com/lidedong/p/5564851.html,使用VS2013实现,有点改进的是释放了一下资源,具体看下面。 连接摄像头设备,这里...
  • FL1623863129
  • FL1623863129
  • 2017年09月30日 15:32
  • 443

C#摄像头实现拍照功能的简单代码示例

作者: 转自:http://www.csharpwin.com/csharpspace/5956r7934.shtml 摘要:这里将介绍一个C#摄像头实现拍照功能的简单代码示例,代码虽然不短...
  • whw8007
  • whw8007
  • 2014年03月06日 19:49
  • 2095

在C#获取摄像头数据的程序

作者:秋叶 转自:http://www.cnblogs.com/chenpeng/archive/2006/06/04/416957.html using System; usi...
  • whw8007
  • whw8007
  • 2014年02月21日 08:59
  • 769

基于Aforge摄像头调用简单示例

基于C#的Aforge类调用简单示例由题,本程序是使用Aforge类库调用摄像头的demo。功能:1.预览 2.前后摄像头切换 1.判断是否有摄像头,无则提示 2.有,判断摄像头个数,...
  • weixin_36957825
  • weixin_36957825
  • 2016年12月14日 11:29
  • 681

C# 操作摄像头

C# 操作摄像头 线程中剪切板的使用注意
  • chenhongwu666
  • chenhongwu666
  • 2014年07月19日 23:40
  • 4123
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#关于摄像头的使用
举报原因:
原因补充:

(最多只允许输入30个字)