C#调用本机摄像头

原文:C#调用本机摄像头

这段时间一个小项目中需要调用本机的摄像头进行拍照,网上搜集了一些资料以及解决的一些小问题,在此记录以便后续使用。

硬件环境:联想C360一体机,自带摄像头

编写环境:vs2010

语言:C# WPF

 

下载AForge类库,并添加引用:

using AForge;
using AForge.Controls;
using AForge.Video;
using AForge.Video.DirectShow;
using Size = System.Drawing.Size;

View Code

 

在xaml界面中添加VideoSourcePlayer控件,此次稍微解释如何添加外来控件:

在工具箱中添加新的选项卡,右键添加选择项,浏览选择控件dll确定,引用控件即可添加到工具箱中。

 

枚举所有的摄像头:

FilterInfoCollection videoDevices;
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

foreach (FilterInfo device in videoDevices)
                {
                    //可以做出处理
                }

 

连接摄像头:

声明:FileterInfo info;info = videoDevices[0];//选取第一个,此处可作灵活改动

VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[info.MonikerString);
            videoSource.DesiredFrameSize = new System.Drawing.Size(214, 281);
            videoSource.DesiredFrameRate = 1;

            videoSourcePlayer.VideoSource = videoSource;
            videoSourcePlayer.Start();

 

关闭摄像头:

videoSourcePlayer.SignalToStop();
            videoSourcePlayer.WaitForStop();

 

拍照:

if (videoSourcePlayer.IsRunning)
                {            string path = "e:\"
                    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 = path + "paizhao" + ".jpg";
                    if (File.Exists(picName))
                    {
                        File.Delete(picName);
                    }
                    using (Stream stream = File.Create(picName))
                    {
                        pE.Save(stream);
                    }
                }

 

 

项目中要求是摄像头处于监控状态,拍照后画面固定存储,不满意可以清空再次进行拍照,直到满意为止。

做法是在videoSourcePlayer的上面添加一个image控件,因为项目是WPF做的,所有照片显示只能添加image控件,有两点需要注意:

1)WPF引用winform控件需要使用WindowsFormsHost控件,所以监控视频和照片显示时是控件WindowsFormsHost和image控件的显示和隐藏,此处走了一段弯路所以记录下来。

2)image控件的source已经绑定,但是照片需要清空删除该照片资源,系统提示的大致意思是资源已经被占用无法删除。解决途径:

声明:BitmapImage bmi = new System.Windows.Media.Imaging.BitmapImage();

 

使用时:bmi.BgeinInit();

bmi.UriSource = new Uri(picName);

bmi.CacheOption = BitmapCacheOption.OnLoad;

bmi.EndInit();

绑定:this.image.Source = bmi;

 

时间: 2024-11-01 02:36:16

C#调用本机摄像头的相关文章

android-Android平板通过OTG调用外接的摄像头

问题描述 Android平板通过OTG调用外接的摄像头 如题,需求是点击手机自带的相机调用,怎么实现这个功能呢?特别是代码部分,该如何下手?求教下,谢谢各位了. 解决方案 http://www.guokr.com/post/357593/

activex-JSP页面用js调用ActiveX使用摄像头

问题描述 JSP页面用js调用ActiveX使用摄像头 这是一个VB程序,调用了一个TesoSeeu.ocx打开摄像头拍照的程序http://pan.baidu.com/s/1sjyyo0H 现在我想在JSP页面上使用这个ocx,可以吗? 求各位大神给一个例子 这个ocx好像是拍照后把数据保存在内存,js没法调用了吧? 解决方案 可以,不过需要预先安装这个控件到客户端计算机,并且在浏览器的安全设置中允许.而且不是所有浏览器都支持ocx,只能用IE或者兼容的浏览器. 解决方案二: 控件有暴露接口给

调用mas机接口做发短信功能出现jar包冲突(应该是jar包冲突)

问题描述 调用mas机接口做发短信功能出现jar包冲突(应该是jar包冲突) Exception in thread "main" javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found at javax.xml.transform.TransformerFactory.newInstanc

HTML 调用电脑手机摄像头拍照

问题描述 关于调用电脑摄像头拍照怎么不行,我在网上下载很多,运行都不行,运行浏览器也没有提示.是用谷歌浏览器.<!doctypehtml><html><head><title>html5capturetest</title></head><body><videoautoplay></video><imgsrc=""><canvasstyle="disp

android开发之调用手机的摄像头使用MediaRecorder录像并播放_Android

我们玩玩手机的录像功能吧.做个DEMO. 看看录制过程: 复制代码 代码如下: mediarecorder = new MediaRecorder();// 创建mediarecorder对象 // 设置录制视频源为Camera(相机) mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4 mediarecorder.setOutputFo

android开发之调用手机的摄像头使用MediaRecorder录像并播放

我们玩玩手机的录像功能吧.做个DEMO. 看看录制过程: 复制代码 代码如下: mediarecorder = new MediaRecorder();// 创建mediarecorder对象 // 设置录制视频源为Camera(相机) mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4 mediarecorder.setOutputFo

js flex 摄像头-js调用flex的开启摄像头的方法失败

问题描述 js调用flex的开启摄像头的方法失败 我用JavaScript调用Flex方法开启摄像头的方法总是失败.但是Flex直接在CreatComplete方法里面调用开启摄像头的方法是成功的.有人说是安全沙箱的问题,我在我的asp.net根目录下扔了一个crossdomain.xml文件也没用.请大神帮助提供解决的方案. flex代码: public function init():void{ ExternalInterface.addCallback("openCamera",

C# 调用摄像头 黑屏

问题描述 我在网上下截了一个生成解析二维码的源码,在某些电脑上可以正常运行,但是在win8系统的平板电脑上就不能正常使用,在调用摄像头的时候,摄像头的指示灯都没亮.求大神帮忙解决-- 解决方案 解决方案二:是不是少framework解决方案三:不同的系统,不同的电脑,驱动也不一样.解决方案四:我使用的是C#的WinForm开发界面.只是调用API连接摄像头,不应该存在驱动不一样的问题,平板电脑本身是可以拍照的.而framework不是WinForm的吧,应该是xaml的.解决方案五:贴码解决方案

基于HTML5实现的超酷摄像头(HTML5 webcam)拍照功能 - photoboo

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在线演示 WebRTC可能是明年最受关注的HTML5标准了,Mozilla为此开发了一套帮助你控制硬件的API,例如,摄像头,麦克风,或者是加速表.你可以不依赖其它的插件来调用你需要的本机11585.html">硬件设备. 在今天的这篇文章中,我们将介绍来自Wolfram Hempel开发的Photobooth.js,使用这个