C#调用摄像头的几种方式

C#调用摄像头的方式

本文将讲诉在C#的winform程序中如何调用摄像头:

1.调用USB摄像头

2.调用普通IP摄像头

3.通过摄像头SDK进行调用

使用的DLL

首先给上我所使用的DLL

调用USB摄像头

调用USB摄像头其实比较简单,就是通过读取电脑自身所拥有的设备数,再执行预览。

videoSourcePlayer是AForge中的控件。

private FilterInfoCollection videoDevices;
this.videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (this.videoDevices.Count > 0)
   {
       VideoCaptureDevice source = new VideoCaptureDevice(this.videoDevices[0].MonikerString);
       this.videoSourcePlayer.SignalToStop();
       this.videoSourcePlayer.WaitForStop();
       this.videoSourcePlayer.VideoSource = source;
       this.videoSourcePlayer.Start();
   }

调用普通IP摄像头

首先要确认HTTP方式传送的图片的地址,我用的SAMSUN地址是http://{0}/cgi-bin/video.cgi?msubmenu=jpg,还有其他的http://{0}/axis-cgi/jpg/image.cgi?camera=1

使用JPEGStream或者MJPEGStream,有用户名和密码的就加上。有了source其他的和上面USB一样。

JPEGStream source = new JPEGStream(URL);
//MJPEGStream source = new MJPEGStream(URL);
source.Login = username;
source.Password = password;
this.OpenVideoSource(source);

通过摄像头SDK进行调用

这个调用还是很简单的,一般都是使用控件的Handle来进行预览的,我们可能会想取每一帧的图片,那么如何取得每一帧呢?因为是通过Handle来预览的所以控件中无法取得,我们需要调用摄像头SDK的获取每一帧的接口,但是这个接口是直接将图片保存到本地的,感觉巨坑有木有。不过我们还是有方法处理的。下面是我对三星摄像头的处理:

public override Bitmap CapturePicture()
{
    Bitmap bitmap = null;
    string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Templates) + @"\SAMSUNG_CapturePicture.bmp";
    if (File.Exists(path))
    {
        File.Delete(path);
    }
    if (SSNetSDK.XNS_DEV_SaveSnapshot(playHandle, path,0))
    {
        using (MemoryStream stream = new MemoryStream(File.ReadAllBytes(path)))
        {
            bitmap = (Bitmap)Image.FromStream(stream);
        }
        File.Delete(path);
    }
    return bitmap;
}

DEMO http://download.csdn.net/detail/xujie1991618/8830347

时间: 2024-12-10 23:07:29

C#调用摄像头的几种方式的相关文章

调用DLL的2种方式

[调用DLL的2种方式] DLL在生成的时候会有dll.lib2个文件,另外包含相应的.h. 1.静态方式,通过lib来引用dll,以及引入.h. 2.只通过dll来使用,前提是知道内部的函数符号. 调用DLL的2种方式,布布扣,bubuko.com

调用webService的几种方式

转自:http://blog.csdn.net/u011165335/article/details/51345224 一.概览 方式1: HttpClient:可以用来调用webservie服务,也可以抓取网页数据 版本1:HttpClient3.0.x 版本2:HttpClient4.x.x(目前最新4.5.2) 这2个版本的使用方式不一样:变动较大 方式2:纯Java(自带API)      jws 方式3:cxf框架 方式4:axis2框架 准备工作: 1.了解wsimport    

java调用webservice的四种方式

webservice: 就是应用程序之间跨语言的调用 wwww.webxml.com.cn 1.xml 2.    wsdl: webservice description language web服务描述语言 通过xml格式说明调用的地址方法如何调用,可以看错webservice的说明书 3.soap simple object access protoacl (简单对象访问协议) 限定了xml的格式 soap 在http(因为有请求体,所以必须是post请求)的基础上传输xml数据 请求和响

JS调用webservice的两种方式

协议肯定是使用http协议,因为soap协议本身也是基于http协议.期中第二种方式:只有webservice3.5以后版本才可以成功 第一种方式:构造soap格式的body,注意加粗的黄色标识,比如: createXMLHttpRequest();     var data;     data = '<?xml version="1.0" encoding="utf-8"?>';     data = data + '<soap:Envelope

C# .NET 动态调用webservice的三种方式

转载自 百度文库 http://wenku.baidu.com/link?url=Q2q50wohf5W6UX44zqotXFEe_XOMaib4UtI3BigaNwipOHKNETloMF4ax4W4iPZcjAW6q8vu45QOjK6DSUon1R10ePVlqG6nwussbbXE6jm 多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我们可能需要在程序运行期间动态调用一个未知的服务.在 .NET Framework

C# 调用WebService的3种方式 :直接调用、根据wsdl生成webservice的.cs文件及生成dll C#调用、动态调用

1.直接调用 已知webservice路径,则可以直接 添加服务引用--高级--添加web引用 直接输入webservice URL.这个比较常见也很简单 即有完整的webservice文件目录如下图所示, 也可以在本地IIS根据webservice文件目录新发布一个webservice,然后程序动态调用,修改Url public new string Url { set; get; } 2.根据wsdl文件生成webservice 的.cs文件 及 生成dll C#调用   有时没有这么多文件

【SSH三大框架】Struts2基础第三篇:配置Action以及调用Action的三种方式

一.struts.xml中的包和命名空间 1.Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间. 如果在配置<package>的时候没有指定namespace属性,则该包下的所有Action处于默认的包空间下 2.例如: <package name="lee" extends="struts-default"> <action name="

java调用redis的八种方式

Redis是一个著名的key-value存储系统,而作为其官方推荐的Java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式的调用方式做一个简单的介绍和对比: 一.普通同步方式 最简单和基础的调用方式 @Test public void test1Normal() { Jedis jedis = new Jedis("localhost"); long start = System.currentTimeMil

C#调用Webservice的几种方式

1-添加服务引用: (1)工程 - Service References - 添加服务引用: (2)在“添加服务引用”中输入Webservice网站发布地址,并敲回车或点击“转到”: (3)调用代码编写 实现方式:ServiceReference1.Service1SoapClient ser1 = new ServiceReference1.Service1SoapClient("Service1SoapClient"); using System; using System.Col