好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#使用Aforge调用摄像头拍照的方法

本文实例为大家分享了c#使用aforge调用摄像头拍照的具体代码,供大家参考,具体内容如下

一、新建一个winform项目

二、使用nuget添加引用

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

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

三、编写程序

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

2.编写代码

 

?

using system;

using system.collections.generic;

using system测试数据ponentmodel;

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();

     }

   }

}

3.测试

附上窗体设计代码:

?

namespace aforgedemo

{

   partial class form1

   {

     /// <summary>

     /// 必需的设计器变量。

     /// </summary>

     private system 测试数据ponentmodel.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测试数据bobox();

       this .label2 = new system .windows.forms.label();

       this .cmbresolution = new system .windows.forms测试数据bobox();

       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 测试数据ponentmodel.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 测试数据ponentmodel.isupportinitialize)( this .picbpreview)).endinit();

       this .resumelayout( false );

       this .performlayout();

 

     }

 

     #endregion

 

     private system .windows.forms.label label1;

     private system .windows.forms测试数据bobox cmbcamera;

     private system .windows.forms.label label2;

     private system .windows.forms测试数据bobox 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;

   }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://HdhCmsTestcnblogs测试数据/godbell/archive/2018/10/01/9734443.html

dy("nrwz");

查看更多关于C#使用Aforge调用摄像头拍照的方法的详细内容...

  阅读:58次