西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发C#.NET → C#操作摄像头实现拍照监控录像功能

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

前往专题相关软件相关文章发表评论 来源:西西整理时间:2014/2/17 9:23:11字体大小:A-A+

作者:西西点击:2185次评论:0次标签: 摄像头

  • 类型:硬件驱动大小:186KB语言:中文 评分:2.7
  • 标签:
立即下载

从正式工作以来一直做的都是基于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中即可找到保存的图片,当然,在程序中把该图片展示出来效果会更好,但是由于时间关系,就不添加了。需要的朋友可以自己实现,有问题的欢迎一起交流。

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

    摄像头驱动
    (16)摄像头驱动
    西西软件园提供好用的摄像头驱动大全下载,支持系统,特别推荐的万能摄像头驱动适合绝大多数的摄像头,但某些品牌摄像头特有的功能无法使用.不过对于一些杂牌厂商出产的摄像头也可以在本站按具体型号搜索,及时帮助你顺利安装。...更多>>
    万能显卡
    (240)万能显卡
    万能显卡驱动适用于所有显卡安装驱动所用,称之为万能显卡驱动。显卡驱动是硬件所对应的软件,你装电脑时那帮你装电脑的人不是给了你很多碟子的吗,那些就是驱动程序,其中必然有一张是显卡的驱动程序。先要确定你的显卡什么牌子型号的,如果记不得了,就打开机箱看那个竖插在主板上的较大板子一般显卡有很大的散热片或风扇上的型号品牌。如果是集成的显卡在主板上看不到前面说的那样的电路板,就看主板上的型号品牌,记下来。但是...更多>>

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    第 1 楼 本机地址CZ88.NET 网友 客人 发表于: 2015/8/24 10:36:18
    感谢,今天用到了

    支持( 0 ) 盖楼(回复)

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)