首页 > 百科 > 电脑 > 电脑教程

C操作摄像头实现拍照监控录像功能

时间:2026-01-16来源:网络作者:小菜点击数:
简介:从正式工作以来一直做的都是基于B/S的Web开发,已经很长时间不研究C/S的东西了,但是受朋友的委托,帮他做一下拍照的这么个小功能。

其实类似的代码网上有很多,但

【菜科解读】

从正式工作以来一直做的都是基于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) // 枚举所有视频输入设备 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 蓝屏要完蛋了,我第一个拍手鼓掌

如果你是一名 Windows 电脑用户,你肯定见识过「蓝屏死机」(Blue Screen of Death,BSOD): 你的电脑遇到了问题,我们需要在收集完一些错误信息后立即重启。

经典的 Windows 蓝屏界面. 图片来自:Windows 面对蓝屏,除了坐和放宽之外,想必大部分人只剩一个选择:重启电脑。

过去几十年里,Windows 电脑的「蓝屏」界面臭名昭著——蓝屏根本没法指导修复工作,只会浪费宝贵的时间——没有正常人会扫那个码或者访问 Windows 的错误代码平台;

考虑到电诈套路深,更没有人会愿意跟微软客服通话。

现在,微软总算想通了。

在下半年即将发布的 Windows 11 24H2 更新中, 「蓝屏」终于不复存在!取而代之的是一个大道至简的「黑屏」界面: Your device ran into a problem and needs to restart. 你的设备出问题了,即将重启。

全新设计的 Windows「黑屏死机」界面. 图片来自:Windows 啊,感觉好多了! 为什么「蓝屏死机」罪大恶极? 在官方博客中,微软详细解释了为什么「蓝屏必须死」: 一个有韧性的组织,其关键特征是保持生产力,并且尽量减少中断。

当意外重启发生时,它们可能导致延迟并影响业务的连续性。

这就是为什么我们在简化意外重启体验。

我们还添加了快速机器恢复功能,这是一种用于无法成功重启的 PC 的恢复机制。

这项更新是我们努力的一部分,旨在减少意外重启时的中断。

不愧是华盛顿州雷德蒙德大企业,死机界面改个设计,都能解释出这么多条条道道。

相信很多人的第一反应:你不如把系统做稳定些,别老死机行不! 太多企业和组织运行在 Windows 操作系统之上,而稳定对于企业往往意味着一切。

如果 Windows 不能在运行过程中保持稳定,或者在遇到问题时不能快速恢复,那么每一秒的流逝,对企业都是巨大的损失。

你可能记得去年席卷全球的 CrowdStrike 蓝屏事件——安全公司 CrowdStrike 因推送了错误的驱动,引发全球超过 850 万台 Windows 设备重复蓝屏,进而导致航司停飞,银行停摆,收银台断线等一系列事故,造成了超过 50 亿美元的损失。

公交站的蓝屏. 图片来自:Unsplash CrowdStrike 事件中影响的场景 2. 图片来自:xxx 这也给微软敲响了警钟,当出现大型事故时,「蓝屏死机」的界面不但没有半点用处,反而会造成用户恐慌。

因此,除了蓝屏改黑屏的重新设计之外,其实微软也在死机处理流程中做了更多的改进,主要是: 首先, Win 11 24H2 引入了快速机器恢复技术(Quick Machine Recovery)具体来说,系统在每次成功启动后,自动写入状态快照,一旦检测到循环崩溃,设备便可自动回滚到上个可启动状态,无需用户手动选择安全模式。

这能够极大减少系统崩溃后的停机时间和人工干预,保障设备快速恢复正常运行。

以及,将 Windows Update、安全中心与驱动状态整合到同一页在健康报告面板里,用颜色区分风险程度的同时,方便远程 IT 批量查看,让信息一目了然。

最后,迁出杀毒、EDR 等频繁更新的组件至用户态,崩溃范围被限制在用户态,大大减少内核代码崩溃的风险,降低了整机的停摆概率。

当然最重要的是,直面用户的极简黑屏,总算做到了给用户「不添乱」。

Windows 11 的系统更新界面,同样是黑底白字. 图片来自:Windows 再见了,所有的 Windows 蓝屏 如果你是从 DOS 时代过来的老油条,想必对 Windows 系统印象最深刻的不是「开始」菜单,而是总在你最不想的时刻出现,令你心跳骤停的那一抹纯蓝。

Windows 蓝屏已经问世近四十年,微软也对这个界面经过多次迭代。

最早,Windows 蓝屏可以追溯到 1985 年,当时 Windows 1.0 时代还运行在 DOS 系统上,偶尔会出现这样让人血压升高的屏幕。

清晰可读的,只剩一行小字: 「微软是微软公司的注册商标,版权所有违法必究!」 1985 年 Windows 1.0 的蓝屏界面. 图片来自:Windows 后来,微软开始在 Windows 系统中写入「蓝屏」的报错信息。

传奇 Windows 系统工程师 Raymond Chen曾分享过「蓝屏」背后的趣闻—— 比如微软前 CEO 史蒂夫·鲍尔默(Steve Ballmer)就曾在 1992 年写过一个程序无法响应的蓝屏,里面的内容也是让用户生气:程序宕机了,你先做这个(数据无法保存),再做那个(数据还是无法保存)。

颇有一种「反正你已经红温了,不如看个蓝屏冷静点」的感觉。

1992 年程序无法响应的蓝屏. 图片来自:Windows 后来,在 Windows 95 系统当中,Raymond Chen 写过另一个「蓝屏死机」界面,直接把出错的内存位都告诉你了——但对用户来说这又有啥用呢? Windows 95 系统蓝屏. 图片来自:Windows 可能是因为总是无法避免死机,微软也把优化改进蓝屏界面这件事,当做一项长期且正式的开发工作来对待了。

真是孜孜不倦呢—— 例如在 2001 年,Windows XP 就把蓝屏字体改成 Lucida Console,也给出了一些后续操作的指示,帮助用户排查可能的问题。

2001 年 Windows XP 蓝屏. 而到了 2012 年,Windows 8 的蓝屏界面不仅加上了悲伤的表情文字,甚至颜色都十分的阴郁(且符合 Win 8 主题配色): 2012 年 Windows 8 蓝屏. 图片来自:Windows 在 2016 年之后,Windows 10 系统终于明白过来,放着满屏的信息对用户一点用都没有。

于是他们又给蓝屏界面加上了二维码: 扫一扫,告诉你到底发生了什么? 2016 年 Windows 10 蓝屏. 图片来自:Windows 前几年,为了迎合 Windows 11 的设计语言,还短暂尝试过「黑色」的蓝屏界面,不过没有实装: Windows 11 「黑色」蓝屏 图片来自:Windows 但不管怎么更新,几十年来,Windows 蓝屏宕机的流程始终是:让系统先停住,告诉你出了什么问题,你再手动查码解决。

这显然是一种工程师思维,背后的原因其实有历史和文化的成分。

毕竟早期的 Windows 面对企业和专业人士设计,当时的互联网并不发达,出现错误时,他们需要详细的错误信息来排查各种系统问题,因此这才会出现蓝屏时满屏内存码的现象。

但经过几十年的迭代,Windows 已经是世界上最大的 PC 操作系统,被数以亿计的普通人使用。

而普通人其实只需要重启便能解决 90% 的问题。

至于重启都解决不了的问题,除了砸电脑还能怎样呢? 这时候,满屏都是字的「蓝屏死机」界面,就显得不合时宜了。

就拿之前的蓝屏界面为例:冗杂的文字、抢眼的蓝色以及交互复杂的二维码,非但无法提供实质帮助,只会让用户更加不知所措。

其实满屏唯一有用的信息,只有那句: Your PC ran into a problem and needs to restart. 你的电脑出问题了,请重启。

蓝屏中 5 种不同的信息. 既然如此,不如化繁为简,按重要程度,在屏幕上提供核心信息: 「你的设备出问题了,请重启」的指示,很重要,大字居中处理错误的百分比进度,紧贴着重启的提示其余少量的错误类型提示信息,用小字说明,放底部,谁有用谁拿去用。

全新设计的 Windows「黑屏死机」界面. 至于具体的错误码等信息,在 Win 11 24H2 里会在重启后自动写进系统日志并上传——既简洁,又高效,核心就是不给用户添乱,制造额外的焦虑。

你只需像系统更新那样,耐心等到 100%,重启即可。

这不仅是视觉的考量,更是「危机」中用户体验设计的体现——宕机的场景下,用熟悉和沉稳的视觉语言安抚用户的情绪,让你在系统恢复的整个过程中,感觉到更加可控和可预测。

这也是微软设计团队想表达的核心:减轻用户不安的同时,让信息更加清晰,从而更快的解决问题。

和蓝屏死机相比,高下立判。

蓝屏. 图片来自:Wired 微软的工程师团队,终于把焦点从「告诉用户出了什么错」,转向「尽快让设备重启」上,让 Windows 系统从被动响应错误,向主动设计弹性系统转变,与其塞满晦涩难懂的报错信息,不如把用户真正需要的操作放大。

毕竟重启就完了。

重启能解决 90% 的问题。

本文作者:周芊彤、肖钦鹏 #欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。

爱范儿|原文链接· ·新浪微博

电脑又蓝屏了!死活进不去系统,其实电脑蓝屏都是你自己“作”的

电脑在运用过程中,经常会遇到这样哪样的问题,死机蓝屏是最杰出、常见的问题;

如果偶尔出现可以不理彩它,但如果出现的频率相当高,影响我们正常运用,怎么办呢?下在我们一起来分析一下原因。

  导致死机蓝屏的原因很多,排查很复杂,但不外乎两原因:一种硬件原因,一种软件原因。

我们先软后硬件来分析一下: 一、软件原因 1、病毒   搞定办法:安装最新杀毒软件进行彻底查杀;

杀毒软件病毒库一定要升级到最新版,可以金山毒霸、360、小红伞等,随你喜好选择;

本人推荐运用小红伞,轻巧,效果不错。

2、驱动、使用程序冲突。

  搞定办法:把所有硬件驱动升级到最新版;

卸载所有多余、功能重复、无用的使用软件、插件。

3、系统所在分区空间不够。

  搞定办法:清理垃圾文件,整理硬盘碎片,优化系统。

4、系统文件被破坏。

  由于非正常关机而导致的系统文件破坏。

  搞定办法:A 用正常的文件替换受损文件。

B 重装操作系统 二、硬件原因。

1、静电、灰尘影响   搞定办法:打开机箱,彻底清理灰尘。

2、内存条问题   搞定办法:清理内存条插槽、清理内存条接触点(金手指)。

或更换新内存条。

3、电脑电源供电不够   电源供电不够或不稳定会导致系统很多问题,可以检测一下电源是否正确。

4、硬盘问题   搞定办法:软件检测硬盘是否有坏道;

备份好数据格式化硬盘重装系统;

或更换新硬盘。

5、主板问题或漏洞   搞定办法:升级主板BOIS,或更换新主板。

  以上是蓝屏死机可能的原因分析,由于具体的运用环境、软件环境不一样,需要具体问题具体分析,可以通过排除法,逐步找到原因。

小恩课堂 欢迎加电脑手机网。

我会与大家分享:电脑维修 装系统 清理电脑 以及组装电脑等等。

以及手机的维修方法和视频 欢迎你的关注 有问题可以留言 我们一起讨论 。

专栏 小恩课堂 作者:小恩课堂 9.9币 295人已购 查看

猜你喜欢

C操作摄像头实现拍照监控录像功能

点击下载文档

格式为doc格式