当前位置: 移动技术网 > IT编程>开发语言>.net > C#使用Aforge调用摄像头拍照

C#使用Aforge调用摄像头拍照

2018年10月02日  | 移动技术网IT编程  | 我要评论

月夜茶会画集,82届奥斯卡获奖名单,高树玛利亚全集

一、 新建一个winform项目

二、使用nuget添加引用

 

安装下图中红色框住的两个程序包

 

 安装完后发现安装了如下图的程序包,这是因为上述两个程序包存在对其它程序包的依赖。

 

 三、编写程序

       1. 窗体设计,摄像头是下拉列表(cmbcamera,控件命名,下同),虽然示例只用到一个摄像头,但是该demo可用于多个摄像头间切换场景,分辨率是下拉列表(cmbresolution),列出摄像头所支持的分辨率,一个videosourceplayer控件(vispshoot),一个picturebox控件(picbpreview)。

        

      2. 编写代码

         

using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.windows.forms;
using aforge.video.directshow;

namespace aforgedemo
{
    public partial class form1 : form
    {
        private filterinfocollection videodevices;
        private videocapturedevice videodevice;
        private videocapabilities[] videocapabilities;
        private videocapabilities[] snapshotcapabilities;
        public form1()
        {
            initializecomponent();
        }

        private void form1_load(object sender, eventargs e)
        {
            videodevices = new filterinfocollection(filtercategory.videoinputdevice);
            if (videodevices.count != 0)
            {
                foreach (filterinfo device in videodevices)
                {
                    cmbcamera.items.add(device.name);
                }
            }
            else
            {
                cmbcamera.items.add("没有找到摄像头");
            }

            cmbcamera.selectedindex = 0;
        }

        private void cmbcamera_selectedindexchanged(object sender, eventargs e)
        {
            if (videodevices.count != 0)
            {
                videodevice = new videocapturedevice(videodevices[cmbcamera.selectedindex].monikerstring);
                getdeviceresolution(videodevice);
            }
        }

        private void getdeviceresolution(videocapturedevice videocapturedevice)
        {
            cmbresolution.items.clear();
            videocapabilities = videocapturedevice.videocapabilities;
            foreach (videocapabilities capabilty in videocapabilities)
            {
                cmbresolution.items.add($"{capabilty.framesize.width} x {capabilty.framesize.height}");
            }
            cmbresolution.selectedindex = 0;
        }

        private void btnconnect_click(object sender, eventargs e)
        {
            if (videodevice != null)
            {
                if ((videocapabilities != null) && (videocapabilities.length != 0))
                {
                    videodevice.videoresolution = videocapabilities[cmbresolution.selectedindex];

                    vispshoot.videosource = videodevice;
                    vispshoot.start();
                    enablecontrolstatus(false);
                }
            }
        }

        private void enablecontrolstatus(bool status)
        {
            cmbcamera.enabled = status;
            cmbresolution.enabled = status;
            btnconnect.enabled = status;
            btnshoot.enabled = !status;
            btndisconnect.enabled = !status;
        }

        private void btndisconnect_click(object sender, eventargs e)
        {
            disconnect();
            enablecontrolstatus(true);
        }

        private void disconnect()
        {
            if (vispshoot.videosource != null)
            {
                vispshoot.signaltostop();
                vispshoot.waitforstop();
                vispshoot.videosource = null;
            }
        }

        private void btnshoot_click(object sender, eventargs e)
        {
            bitmap img = vispshoot.getcurrentvideoframe();
            picbpreview.image = img;
        }

        private void form1_formclosing(object sender, formclosingeventargs e)
        {
            disconnect();
        }
    }
}
view code

     3. 测试

        

 附上窗体设计代码:

namespace aforgedemo
{
    partial class form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private system.componentmodel.icontainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.dispose();
            }
            base.dispose(disposing);
        }

        #region windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void initializecomponent()
        {
            this.label1 = new system.windows.forms.label();
            this.cmbcamera = new system.windows.forms.combobox();
            this.label2 = new system.windows.forms.label();
            this.cmbresolution = new system.windows.forms.combobox();
            this.vispshoot = new aforge.controls.videosourceplayer();
            this.picbpreview = new system.windows.forms.picturebox();
            this.btnconnect = new system.windows.forms.button();
            this.btndisconnect = new system.windows.forms.button();
            this.btnshoot = new system.windows.forms.button();
            ((system.componentmodel.isupportinitialize)(this.picbpreview)).begininit();
            this.suspendlayout();
            // 
            // label1
            // 
            this.label1.autosize = true;
            this.label1.location = new system.drawing.point(39, 22);
            this.label1.name = "label1";
            this.label1.size = new system.drawing.size(53, 12);
            this.label1.tabindex = 0;
            this.label1.text = "摄像头:";
            // 
            // cmbcamera
            // 
            this.cmbcamera.formattingenabled = true;
            this.cmbcamera.location = new system.drawing.point(98, 19);
            this.cmbcamera.name = "cmbcamera";
            this.cmbcamera.size = new system.drawing.size(113, 20);
            this.cmbcamera.tabindex = 1;
            this.cmbcamera.selectedindexchanged += new system.eventhandler(this.cmbcamera_selectedindexchanged);
            // 
            // label2
            // 
            this.label2.autosize = true;
            this.label2.location = new system.drawing.point(217, 22);
            this.label2.name = "label2";
            this.label2.size = new system.drawing.size(53, 12);
            this.label2.tabindex = 0;
            this.label2.text = "分辨率:";
            // 
            // cmbresolution
            // 
            this.cmbresolution.formattingenabled = true;
            this.cmbresolution.location = new system.drawing.point(276, 19);
            this.cmbresolution.name = "cmbresolution";
            this.cmbresolution.size = new system.drawing.size(88, 20);
            this.cmbresolution.tabindex = 1;
            // 
            // vispshoot
            // 
            this.vispshoot.location = new system.drawing.point(41, 54);
            this.vispshoot.name = "vispshoot";
            this.vispshoot.size = new system.drawing.size(591, 332);
            this.vispshoot.tabindex = 2;
            this.vispshoot.text = "videosourceplayer1";
            this.vispshoot.videosource = null;
            // 
            // picbpreview
            // 
            this.picbpreview.location = new system.drawing.point(41, 423);
            this.picbpreview.name = "picbpreview";
            this.picbpreview.size = new system.drawing.size(180, 175);
            this.picbpreview.sizemode = system.windows.forms.pictureboxsizemode.zoom;
            this.picbpreview.tabindex = 3;
            this.picbpreview.tabstop = false;
            // 
            // btnconnect
            // 
            this.btnconnect.location = new system.drawing.point(382, 19);
            this.btnconnect.name = "btnconnect";
            this.btnconnect.size = new system.drawing.size(80, 23);
            this.btnconnect.tabindex = 4;
            this.btnconnect.text = "连接";
            this.btnconnect.usevisualstylebackcolor = true;
            this.btnconnect.click += new system.eventhandler(this.btnconnect_click);
            // 
            // btndisconnect
            // 
            this.btndisconnect.enabled = false;
            this.btndisconnect.location = new system.drawing.point(468, 19);
            this.btndisconnect.name = "btndisconnect";
            this.btndisconnect.size = new system.drawing.size(80, 23);
            this.btndisconnect.tabindex = 4;
            this.btndisconnect.text = "断开";
            this.btndisconnect.usevisualstylebackcolor = true;
            this.btndisconnect.click += new system.eventhandler(this.btndisconnect_click);
            // 
            // btnshoot
            // 
            this.btnshoot.enabled = false;
            this.btnshoot.location = new system.drawing.point(552, 19);
            this.btnshoot.name = "btnshoot";
            this.btnshoot.size = new system.drawing.size(80, 23);
            this.btnshoot.tabindex = 4;
            this.btnshoot.text = "拍照";
            this.btnshoot.usevisualstylebackcolor = true;
            this.btnshoot.click += new system.eventhandler(this.btnshoot_click);
            // 
            // form1
            // 
            this.autoscaledimensions = new system.drawing.sizef(6f, 12f);
            this.autoscalemode = system.windows.forms.autoscalemode.font;
            this.clientsize = new system.drawing.size(677, 610);
            this.controls.add(this.btnshoot);
            this.controls.add(this.btndisconnect);
            this.controls.add(this.btnconnect);
            this.controls.add(this.picbpreview);
            this.controls.add(this.vispshoot);
            this.controls.add(this.cmbresolution);
            this.controls.add(this.cmbcamera);
            this.controls.add(this.label2);
            this.controls.add(this.label1);
            this.name = "form1";
            this.text = "form1";
            this.formclosing += new system.windows.forms.formclosingeventhandler(this.form1_formclosing);
            this.load += new system.eventhandler(this.form1_load);
            ((system.componentmodel.isupportinitialize)(this.picbpreview)).endinit();
            this.resumelayout(false);
            this.performlayout();

        }

        #endregion

        private system.windows.forms.label label1;
        private system.windows.forms.combobox cmbcamera;
        private system.windows.forms.label label2;
        private system.windows.forms.combobox cmbresolution;
        private aforge.controls.videosourceplayer vispshoot;
        private system.windows.forms.picturebox picbpreview;
        private system.windows.forms.button btnconnect;
        private system.windows.forms.button btndisconnect;
        private system.windows.forms.button btnshoot;
    }
}
view code

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网