从正式工作以来一直做的都是基于B/S的Web开发,已经很长时间不研究C/S的东西了,但是受朋友的委托,帮他做一下拍照的这么个小功能。其实类似的代码网上有很多,但是真的能够拿来运行的估计也没几个。本来是说周末给做的,但是这两天脑子一直很乱,也没静下来,晚上了,再不做明天有点不好意思啊,只能临时做一个了。在网上找资料自己做的过程中也发现了一些问题,于是拿到博客上来分享一下,这样一来有需要的朋友可以直接拿来用,二来正在研究的遇到这些问题了可以迎刃而解。

刚开始接触摄像头视频之类的是在大二的时候,那时候因为实验室有一个小项目交到我手上,所以那时候对播放视频之类的了解了一些。那时候的需求是对已经录下来的监控录像做处理,整个过程是已经不需要自己再去控制录像了,所以相对简单一点。而拍照和摄像是自己控制,所以稍微复杂那么一点点。行了,废话说到这里,下面进入正题。

还是以往的作风,只实现功能,对界面不做过多的美化,有需要的朋友可以自己动手。比较这年头自己动手,丰衣足食嘛。图1-1是程序的主界面:


图1-1

操作摄像头以及实现拍照功能整个过程主要都是通过一个第三方的组件实现的,名字叫做 AForge ,是国外的组件,所以打开起来有点慢,但是要有耐心啊,目前已经更新到2.2.5版本了。如果不愿意从官网上下载,文章末尾处也给出了相应的下载地址,需要的话直接拿来用就ok了。程序也很简单,一个WinForm页面,添加一下对Aforge的引用就可以了,但是这个过程中会引用一些其他的dll,有些不是太常用,所以在这里对引用的dll也做了截图(图1-2),在自己做的过程中参照一下即可。


图1-2

上图1-1中间部分是用来实时显示摄像头开启后获取到的内容,是一个自定义控件。这里得说明一下,将AForge.Controls.dll拖拽到左侧的工具箱区域,然后就出来自定义控件了。这里顺便说明一下,我们平时自己开发的自定义控件也可以通过这种方式来给别人用。前台都准备好了之后我们来开始分析后台代码。

整个的思路是先找到电脑上的摄像头设备,然后选择我们需要操作的设备,然后在拍照或者摄像。今天由于时间关系仅仅只是实现拍照,下次再做摄像的功能,实现之后也会一样分享在这里的,希望有需要的朋友关注。

当Form加载的时候,我们监听一下其Load事件,将检测到的摄像头设备添加到后边的ComboBox中供用户选择,关键代码如下:

Private void Form1_Load(object sender, EventArgs e)

{

try

{

// 枚举所有视频输入设备

videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

if (videoDevices.Count == 0)

throw new ApplicationException();

foreach (FilterInfo device in videoDevices)

{

tscbxCameras.Items.Add(device.Name);

}

tscbxCameras.SelectedIndex = 0;

}

catch (ApplicationException)

{

tscbxCameras.Items.Add("No local capture devices");

videoDevices = null;

}

}

当用户选择某一摄像头设备再点击连接的时候,我们打开摄像头,并对其进行初始化,关键代码:

//连接摄像头

private void CameraConn()

{

VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString);

videoSource.DesiredFrameSize = new System.Drawing.Size(320, 240);

videoSource.DesiredFrameRate = 1;

videoSourcePlayer.VideoSource = videoSource;

videoSourcePlayer.Start();

}

当用户关闭点击关闭摄像头的时候,我们做关闭的处理,代码:

//关闭摄像头

private void btnClose_Click(object sender, EventArgs e)

{

videoSourcePlayer.SignalToStop();

videoSourcePlayer.WaitForStop();

}

当用户点击拍照的时候,我们获取摄像头当前的画面,并保存到设定的路径下,然后关闭当前窗口。关键代码:

//拍照

private void Photograph_Click(object sender, EventArgs e)

{

try

{

if (videoSourcePlayer.IsRunning)

{

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 = GetImagePath() + "\\" + "xiaosy" + ".jpg";

if (File.Exists(picName))

{

File.Delete(picName);

}

using (Stream stream = File.Create(picName))

{

pE.Save(stream);

}

//拍照完成后关摄像头并刷新同时关窗体

if (videoSourcePlayer != null && videoSourcePlayer.IsRunning)

{

videoSourcePlayer.SignalToStop();

videoSourcePlayer.WaitForStop();

}

this.Close();

}

}

catch (Exception ex)

{

MessageBox.Show("摄像头异常:" + ex.Message);

}

}

private string GetImagePath()

{

string personImgPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)

+ Path.DirectorySeparatorChar.ToString() + "PersonImg";

if (!Directory.Exists(personImgPath))

{

Directory.CreateDirectory(personImgPath);

}

return personImgPath;

}

关闭之后,在bin目录下的PersonImg中即可找到保存的图片,当然,在程序中把该图片展示出来效果会更好,但是由于时间关系,就不添加了。需要的朋友可以自己实现,有问题的欢迎一起交流。

至此,这样一个简单的拍照功能就完成了,在这里,附上源码下载地址。

C#操作摄像头实现拍照监控录像功能相关推荐

  1. C#操作Aforge摄像头 实现拍照、录像功能

    准备 添加引用 http://download.csdn.net/download/u011463646/10021001 .NET 2.0以上 你给项目添加.NET引用 找到Presentation ...

  2. 树莓派(四):使用摄像头实现拍照和远程监控功能

    配置好树莓派的基本环境之后,就可以使用树莓派的摄像头模块了,接下来我会教你一些关于树莓派摄像头的基本操作:摄像头拍照,并实现摄像头的远程监控. 配置摄像头 首先将树莓派与摄像头模块插好: 插法是将蓝色 ...

  3. opencv启动摄像头并且操作摄像头拍照

    提示:代码由pycharm实现 文章目录 前言 一.引入库 二.步骤 1.开启摄像头 2.设置一个变量方便后面保存图片 3.设置循环检测 总结 前言 本次我们记录OpenCV的启用电脑的摄像头以及对摄 ...

  4. android 前摄屏幕补光,异形显示屏及其前置摄像头的拍照补光方法与流程

    本申请涉及显示领域,特别是涉及一种异形显示屏及其前置摄像头的拍照补光方法. 背景技术: 随着全面屏显示技术的迅速发展,由于前置摄像头的存在,越来越多的屏幕采取了挖孔或是开口的设计,即在屏幕的一部分会包 ...

  5. 摄像头 UIImagePickerController拍照和视频录制

    下面看一下在iOS如何拍照和录制视频.在iOS中要拍照和录制视频最简单的方法就是使用UIImagePickerController.UIImagePickerController继承于UINaviga ...

  6. C# 调用AForge类库操作摄像头

    如有雷同,不胜荣幸,若转载,请注明 最近做项目需要操作摄像头,在网上百度了很多资料,很多都是C#调用window API 发送SendMessage,实现操作摄像头,但是C#调用window API的 ...

  7. 海康摄像头视频实时监控

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 海康摄像 ...

  8. 使用海康摄像头实现实时监控

    原文地址为: 使用海康摄像头实现实时监控 1.  基于RTSP协议的windows平台监控. 1.1 选取海康网络摄像头(支持RTSP,标准H.264 RTP封装的设备). 1.2. 按照摄像头的使用 ...

  9. 树莓派 摄像头 VLC实时监控

    这两天在捣鼓树莓派摄像头通过电脑实时监控,有一枚官方鱼眼摄像头,本来是打算实现在任何网络中都可以直接访问,看网上很多教程都是VLC,于是就按照教程来,后来发现VLC只能在局域网中,那就先局域网吧. 网 ...

最新文章

  1. 大数据技术在跨境电商中的应用
  2. L1-011 A-B (20 分)(c语言实现)
  3. Flink专题-BaseTransform
  4. JavaFX技巧12:在CSS中定义图标
  5. mysql远程连接权限grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘123456‘ with grant option语句报错
  6. php繁体输出,PHP输出控制功能在简繁体转换中的应用
  7. 人工神经网络与生物神经网络
  8. Qt:Windows编程—DLL注入与卸载
  9. 进入云原生、分布式的时代,什么才是数据库的正确打开方式
  10. 【图像数据增强】Mixup、Cutout、Random Erasing、CutMix、Mosaic等详解
  11. 网络共享服务器 samba
  12. Faiss从入门到实战精通
  13. 有没有这样一种程序员写代码的利器
  14. 谷歌浏览器访问网站无法加载验证码图片问题
  15. 【pyecharts库与pandas库】利用pyecharts库根据表格中的GDP数据绘制2021年中国各省GDP热力图和GDP较低的五个省的人均GDP与人口的柱状图
  16. 最新版MATLAB怎么运行代码,matlab怎么运行代码
  17. JPA学习(基于hibernate)
  18. mobaXterm中delete键显示^?
  19. Linux用RPM安装vsftpd,Linux通过RPM方式安装vsftpd
  20. 巧用天翼云盘备份云主机数据

热门文章

  1. 【hexo】butterfly主题魔改之天气插件
  2. mysql数据库搭建
  3. 2014 android全球用户,2014年全球Android手机出货量占比高达81.5%
  4. 10个最好的免费PDF阅读器清单分享
  5. 服务器静态页面分享微信,JS中静态页面如何实现微信分享功能
  6. python 汇编_python 汇编
  7. 本地客户端连接阿里云Redis服务器
  8. c语言注释的作用文百,C语言注释-C语言行注释-C语言注释块注释-嗨客网
  9. Android教程-从零开始一步一步接入SDK
  10. VUE动态路由下刷新丢失路由的解决方法