调用电脑上的摄像头实现打开摄像头并拍照的功能

时间:2022-04-14 10:24:21

既然是身为程序员,我就觉得我应该对我的电脑有着一定的控制力,这控制力的表现就比如我想每天记录我的样子,以后做对比。刚好笔记本上面就自带了一个摄像头,我就想通过调用摄像头,实现拍照的功能。然后我就开始了百度的路程。。。

 首先是需要调用电脑上的摄像头实现打开摄像头并拍照的功能

这些dll文件,然后导入命名空间

using AForge;
using AForge.Video;
using AForge.Video.DirectShow;
using AForge.Imaging;
using AForge.Imaging.Filters;

不过上面这些命名空间有些并没有用到,好像就用到了两个

using AForge.Video;
using AForge.Video.DirectShow;

 

 

之后,写一个方法用来查找电脑上的摄像头

首先定义两个全局变量

private FilterInfoCollection videoDevices;//摄像头的设备
private VideoCaptureDevice videoSource;//摄像头的视频

 

之后查找摄像头

/// <summary>
/// 获取摄像机设备
/// </summary>
/// <returns></returns>
void FindDevices()
{
try
{
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (videoDevices.Count!=0)
{
foreach (FilterInfo device in videoDevices)
{
cbb_Camera.Items.Add(device.Name);//将电脑上的摄像头的名字遍历输出到combobox中
}
if (cbb_Camera.Items.Count>1)
{
cbb_Camera.SelectedIndex = 1;
}
else
{
cbb_Camera.SelectedIndex = 0;//索引值设置为第一个
}

}
else
{

}
}
catch (Exception ex)
{
tb_state.Text += ex.Message+"\n";
}
}

 

 

 

然后打开摄像头

 

/// <summary>
/// 打开摄像头
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_OpenCamera_Click(object sender, EventArgs e)
{
if (videPlayer.IsRunning)
{
return;
}
videoSource = new VideoCaptureDevice(videoDevices[cbb_Camera.SelectedIndex].MonikerString);//获取到下拉框中选择的索引值所对应的相机设备
videPlayer.VideoSource = videoSource;//将摄像机画面设置videPlayer控件上
videPlayer.Start();
}

 

这里面打开摄像头需要将图像显示到一个VideoPlayer的控件上,该控件是由AForge.Controls.VideoSourcePlayer提供的

 

然后是拍照的方法

 

/// <summary>
/// 照相
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_CameraCapture_Click(object sender, EventArgs e)
{
if (videoDevices.Count>0&&videoSource!=null)//如果摄像机设备的数量大于0并且视频源不为空
{
videoSource.NewFrame += new NewFrameEventHandler(videoSource_NewFrame);//拍照事件
}
}