C#编程之C#调用摄像头的几种方式
小标 2018-10-22 来源 : 阅读 1984 评论 0

摘要:本文主要向大家介绍了C#编程之C#调用摄像头的几种方式,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之C#调用摄像头的几种方式,通过具体的内容向大家展示,希望对大家学习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地址是//{0}/cgi-bin/video.cgi?msubmenu=jpg,还有其他的//{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 //download.csdn.net/detail/xujie1991618/8830347
        
            $(function () {
                $(‘pre.prettyprint code‘).each(function () {
                    var lines = $(this).text().split(‘\n‘).length;
                    var $numbering = $(‘

  • ‘).addClass(‘pre-numbering‘).hide();


  •                     $(this).addClass(‘has-numbering‘).parent().append($numbering);


  •                     for (i = 1; i <= lines; i++) {


  •                         $numbering.append($(‘

  • ‘).text(i));
                        };
                        $numbering.fadeIn(1700);
                    });
                });

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程