本文实例为大家分享了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调用摄像头拍照的方法的详细内容...