需求:由于项目需要获得用户的头像,所以需要用C#调用摄像头获取头像。

下面写一个调用摄像头的方法

案例:调用摄像头的一个DEMO【效果图】

使用的类库:AForge.dll   【Demo下载,Demo里面有类库】

1、检测电脑上的摄像头设备

FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

用Count判断摄像头设备的个数,如果没有摄像头,则抛出异常【自行处理异常】,有摄像头,则添加到下拉框中

if (videoDevices.Count == )
throw new ApplicationException(); foreach (FilterInfo device in videoDevices)
{
tscbxCameras.Items.Add(device.Name);
}

2、连接摄像头

检测到摄像头,就可以开始连接摄像头,获取图像啦。

//选择下拉框中的一个摄像头设备
VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString); //设置获取显示图像框的大小
videoSource.DesiredFrameSize = new Size(, );
videoSource.DesiredFrameRate = ; //为摄像头控件设置摄像头获取的图片
videPlayer.VideoSource = videoSource;
//开启摄像头
videPlayer.Start();

3、关闭摄像头【也可以用 Stop() 方法关闭】

videPlayer.SignalToStop();
videPlayer.WaitForStop();

Demo运行截图:


项目中,多了一个截图:把摄像头上的图片绘制下来

 img = new Bitmap(, , PixelFormat.Format24bppRgb); //设置图片的大小,位数
videPlayer.DrawToBitmap((Bitmap)img, new Rectangle(, , videPlayer.Width, videPlayer.Height)); //绘制图像到Img对象
videPicture.Image = img;

//显示到PictureBox控件上

在这里遇到过一个问题,那就是 GDI+一般性错误【原因:资源占用】

遇到问题的情况:

1、修改人员信息的时候,先从本地读取图片文件,赋值到PictureBox上。

2、保存的时候会再把PictureBox的图片保存到本地硬盘中。

解决办法: 【解除图片资源占用即可】

1、把本地图片读取出来,深复制一份

2、把深复制的那一份赋值到PictureBox

3、关闭本地图片资源的关闭

#region 深复制图片,并且关闭资源,防止出现占用
//图片的深复制,并且关闭占用图片文件的资源
img = new Bitmap(path);
Image bmp = new Bitmap(img.Width, img.Height);
Graphics draw = Graphics.FromImage(bmp);
draw.DrawImage(img, , );
draw.Dispose();
img.Dispose();
videPicture.Image = bmp;
#endregion

项目中使用截图:

【C#】#100 调用摄像头的更多相关文章

  1. Android开发中如何调用摄像头的功能

    我们要调用摄像头的拍照功能,显然 第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码     & ...

  2. python+opencv读取视频,调用摄像头

    引用 import cv2 import numpy 创建摄像头对象 cap = cv2.VideoCapture("videoTest/test1.mp4") #参数为视频文件目 ...

  3. 使用vue做移动app时,调用摄像头扫描二维码

    现在前端技术发展飞快,前端都能做app了,那么项目中,也会遇到调用安卓手机基层的一些功能,比如调用摄像头,完成扫描二维码功能 下面我就为大家讲解一下,我在项目中调用这功能的过程. 首先我们需要一个中间 ...

  4. C#调用摄像头(AForge)实现扫描条码解析(Zxing)功能

    网上找了很多代码,都比较零散,以下代码纯自己手写,经过测试.下面有链接,下载后可以直接使用. 介绍: 自动识别:点击Start按钮会调用PC摄像头,代码内置Timer,会每100毫秒识别一下当前摄像头 ...

  5. js实现初始化调用摄像头

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  6. unity调用摄像头的方法

    http://blog.csdn.net/cocoa_china/article/details/10527995 using UnityEngine; using System.Collection ...

  7. java javacv调用摄像头并拍照

    调用摄像头并拍张照片,我一开始用的java的jmf媒体框架,但这个有很多的局限性不好使并且很有麻烦,兜了一圈发现javacv东西,研究之后这东西简单,方便:废话不多说了来重点. javacv官网:点击 ...

  8. Android入门(十六)调用摄像头相册

    原文链接:http://www.orlion.ga/665/ 一.调用摄像头 创建一个项目ChoosePicDemo,修改activity_main.xml: <LinearLayout xml ...

  9. android: 调用摄像头拍照

    很多应用程序都可能会使用到调用摄像头拍照的功能,比如说程序里需要上传一张图片 作为用户的头像,这时打开摄像头拍张照是最简单快捷的.下面就让我们通过一个例子来学 习一下,如何才能在应用程序里调用手机的摄 ...

随机推荐

  1. Django 多表查询

    多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案. ForeignKey 来自Django官方文档的模型示例: from django.db import model ...

  2. 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序的解决方法

    在win7 操作系统中SQL2008导入excel2007 出现: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序 的解决方法: 出现这个原因是office 2007 ...

  3. sql中把时间转换成xx年xx月xx日

    DECLARE @dt datetime SET @dt=GETDATE()--1.短日期格式:yyyy-m-d SELECT STUFF(STUFF(CONVERT(char(8),@dt,112) ...

  4. 关于EF Unit of Work Repository的简单用法

    其实ef本身就是unit of work+repository的 其中继承自DbContext的类就是unit of work context中的DbSet<T>属性就是repositor ...

  5. Jquery链式编程及Index()详解

    Jquery中的方法基本 上都可以返回一个Jquery对象, 如: <body> <div class="divcontent"> <p>中国& ...

  6. 【转载&&干货】Noip应试技巧

    NOIP应试技巧 如何看待别人的经验? 我想大家都有台上的学长滔滔不绝,但是自己在台下漠不关心,或是老师考试前的叮嘱说完一会儿功夫就忘记了的经历吧.所以,有可能我接下来的所说的话,一到考场上就全部忘记 ...

  7. PoPo数据可视化周刊第6期

    PoPo数据可视化 聚焦于Web数据可视化与可视化交互领域,发现可视化领域有意思的内容.不想错过可视化领域的精彩内容, 就快快关注我们吧 :) 本期可视化精彩视频请关注公众号浏览 全天智能获Pre-A ...

  8. WCF服务使用(IIS+Http)和(Winform宿主+Tcp)两种方式进行发布

    1.写在前面 刚接触WCF不久,有很多地方知其然不知其所以然.当我在[创建服务->发布服务->使用服务]这一过程出现过许多问题.如客户端找不到服务引用:客户端只在本机环境中才能访问服务,移 ...

  9. BZOJ2227 [Zjoi2011]看电影(movie)

    Description \(k\)个座位,\(n\)个人依次过来,每人随机从\(k\)个座位中选择一个,并从它开始不停向后走直到遇到空座位坐下.求所有人都能坐下的概率(即没有人走到第\(k+1\)个位 ...

  10. CentOS7系列--1.4CentOS7服务

    CentOS7服务管理 1. 查看服务 1.1. 查看所有运行的服务 [root@centos7 ~]# systemctl -t service UNIT LOAD ACTIVE SUB DESCR ...