其实类似的代码网上有很多,但是真的能够拿来运行的估计也没几个。
本来是说周末给做的,但是这两天脑子一直很乱,也没静下来,晚上了,再不做明天有点不好意思啊,只能临时做一个了。
在网上找资料自己做的过程中也发现了一些问题,于是拿到博客上来分享一下,这样一来有需要的朋友可以直接拿来用,二来正在研究的遇到这些问题了可以迎刃而解。
刚开始接触摄像头视频之类的是在大二的时候,那时候因为实验室有一个小项目交到我手上,所以那时候对播放视频之类的了解了一些。
那时候的需求是对已经录下来的监控录像做处理,整个过程是已经不需要自己再去控制录像了,所以相对简单一点。
而拍照和摄像是自己控制,所以稍微复杂那么一点点。
行了,废话说到这里,下面进入正题。
还是以往的作风,只实现功能,对界面不做过多的美化,有需要的朋友可以自己动手。
比较这年头自己动手,丰衣足食嘛。
图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) // 枚举所有视频输入设备 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) { 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中即可找到保存的图片,当然,在程序中把该图片展示出来效果会更好,但是由于时间关系,就不添加了。
需要的朋友可以自己实现,有问题的欢迎一起交流。
至此,这样一个简单的拍照功能就完成了,在这里,附上源码下载地址。
操作,摄像头,实现,拍照,监控,录像,功能,从,
40 岁的 Windows 蓝屏要完蛋了,我第一个拍手鼓掌
电脑又蓝屏了!死活进不去系统,其实电脑蓝屏都是你自己“作”的
电脑突然蓝屏?这些原因和排查步骤一看就会
超纯净启动盘制作!无软件绑定,无TPM2.0限制,老电脑也能玩转win11!
如何制作Windows启动盘?安全制作方法+避坑指南
电脑在什么情况下需要重装系统,有什么方法可以重装系统?
远程控制电脑教程:掌握这5种方法,足不出户解决问题,高效又安全!
电脑教程
18+
荒原曙光电脑版怎么玩 荒原曙光PC游玩教程
电脑教程
19+
电脑上的四步操作,解决你99%的电脑问题,不允许你不知道。
电脑教程
17+
机床数显表功能详细操作说明书
电器
19+
?电脑系统重装怎么操作?简单四步轻松搞定?
电脑教程
7+
?[w10共享w7打印机]怎么实现?
u盘启动盘
10+
?操作系统基础知识与常见故障排查指南?
Win10教程
14+
手机怎么使用160WiFi实现便捷无线热点共享
电脑教程
21+
抖音小店爆单怎么操作?抖音小店快速出单的七大技巧
手机软件
10+
?苹果怎么截图详细操作指南与技巧分析?
Win7教程
16+
手机能否当作U盘给电脑装系统?
电脑教程
14+
keep健身离线使用
电脑教程
20+
钉钉的聊天记录怎么彻底删除
电脑教程
22+
锐龙处理器核显性能天梯图
电脑教程
26+
enable电脑上是什么意思?
电脑教程
28+
电脑一键还原:快速恢复系统小助手
电脑教程
21+
轻松上手:搜狗输入法下载与设置指南,满足你的输入需求!
电脑教程
29+
win10动态桌面影响电脑性能吗?
电脑教程
20+
?鲁大师重装系统教程:小白也能快速搞定电脑问题指南?
电脑教程
24+
电视芯片性能排行及选购建议详解:
电脑教程
20+
SD卡写保护原因及解决方法:解除SD卡写保护状态
电脑教程
16+
QQ电脑管家+金山毒霸”强强联手套装极速查杀病毒
电脑教程
20+
首雨180插卡收音机拆机图文
电脑教程
24+
amd核显天梯图全:选购建议与对比分析
电脑教程
22+
小布助手怎么卸载
电脑教程
22+
为什么电脑很卡?
电脑教程
21+