目录
一、摄像头连接和拍照
1.创建新项目,添加AForge的6个包
创建新项目
点击项目-管理,选择"管理NuGet 程序包"
安装AForge 这6个包
下载完成后,点击解决方案资源管理器,点击解决方案下的引用,可以看到下载好的6个包
2.绘制窗体及添加代码
(1)添加以下代码
using AForge;
using AForge.Controls;
using AForge.Video;
using AForge.Video.DirectShow;
(2)绘制窗体
从左侧工具箱中拖一个GroupBox控件到Form1中,将属性中的text改为摄像头
从工具箱拖一个combobox控件;再拖一个button控件,将button属性的text改为”扫描“;然后拖一个控件videosourceplayer;再拖三个button控件,属性的text分别设置为”连接“、”拍照“、”关闭“
(3)写入代码
// 设置摄像头参数
private FilterInfoCollection videoDevices; // 采集所有摄像头
public bool isVideo = false;
分别双击Form1的”扫描“、”连接“、”拍照“、”关闭“控件 ,写入以下代码
// “扫描”按键代码
private void button1_Click(object sender, EventArgs e)
{
if (!isVideo)
{
//枚举视频输入设备
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (videoDevices.Count == 0)
{
comboBox1.Text = "没有检测到视频设备!";
videoDevices = null;
}
foreach (FilterInfo device in videoDevices)
{
comboBox1.Text = device.Name;
isVideo = true;
}
comboBox1.SelectedIndex = -1;
if (isVideo)
button2.Enabled = true;
}
button1.Enabled = false;
private void button2_Click(object sender, EventArgs e)
{
// “连接”按键代码
VideoCaptureDevice videoCapture = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex+1].MonikerString);
videoSourcePlayer1.VideoSource = videoCapture;
videoSourcePlayer1.Start();
button2.Enabled = false;
button3.Enabled = true;
button4.Enabled = true;
}
private void button3_Click(object sender, EventArgs e)
{
// “拍照”按键代码
Bitmap img = videoSourcePlayer1.GetCurrentVideoFrame();//拍摄
img.Save(string.Format("D://img.jpg"));
MessageBox.Show("图片保存成功!");
//img.Dispose();
}
private void button4_Click(object sender, EventArgs e)
{
// 设置拍照关闭代码
videoSourcePlayer1.SignalToStop();
videoSourcePlayer1.WaitForStop();
button2.Enabled = true;
button3.Enabled = false;
button4.Enabled = false;
}
再写入初始化代码
// 初始化
public void init()
{
button1.Enabled = true;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
comboBox1.Items.Clear();
isVideo = false;
comboBox1.Text = "";
}
最后在Form1代码段里加入init();
public Form1()
{
InitializeComponent();
init();
}
3、运行结果
图片保存在D盘目录下
二、麦克风、扬声器音量获取及设置
1、绘制窗体及添加代码
(1)麦克风
从工具箱中拖一个groupbox控件,将text设为麦克风;再分别拖两个button控件,text分别设置为获取麦克风音量,设置麦克风音量;再拖一个label控件,text设为待检测;最后拖一个textbox控件。
双击控件设置如下代码
(最好不要直接复制代码,先双击控件再在出来的代码段添加代码,不然可能运行不了)
代码:
private void button5_Click(object sender, EventArgs e)
{
// “获取麦克风音”按键代码
label1.Text = Convert.ToString(GetCurrentMicVolume());
}
private int GetCurrentMicVolume()
{
int volume = 0;
var enumerator = new MMDeviceEnumerator();
//获取音频输入设备
IEnumerable<MMDevice> captureDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active).ToArray();
if (captureDevices.Count() > 0)
{
MMDevice mMDevice = captureDevices.ToList()[0];
volume = (int)(mMDevice.AudioEndpointVolume.MasterVolumeLevelScalar * 100);
}
return volume;
}
private void button6_Click(object sender, EventArgs e)
{
// “设置麦克风音”按键代码
string ret = "";
try
{
int volnum = Convert.ToInt16(textBox1.Text);
if (volnum > 100)
ret = "音量不能超过100";
else
ret = SetCurrentMicVolume(volnum);
}
catch { ret = "请输入合法数值!"; }
}
private string SetCurrentMicVolume(int volume)
{
var enumerator = new MMDeviceEnumerator();
IEnumerable<MMDevice> captureDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active).ToArray();
if (captureDevices.Count() > 0)
{
MMDevice mMDevice = captureDevices.ToList()[0];
mMDevice.AudioEndpointVolume.MasterVolumeLevelScalar = volume / 100.0f;
}
return volume.ToString();
}
出现这种错误时,鼠标放在错误上,安装包
此时的using指令
(2)扬声器
从工具箱中拖一个groupbox控件,将text设为扬声器;再分别拖两个button控件,text分别设置为获取扬声器音量,设置扬声器音量;再拖一个label控件,text设为待检测;最后拖一个textbox控件。
双击控件设置如下代码
代码:
private void button7_Click(object sender, EventArgs e)
{
// “获取扬声器音”按键代码
label2.Text = Convert.ToString(GetCurrentSpeakerVolume());
}
private int GetCurrentSpeakerVolume()
{
int volume = 0;
var enumerator = new MMDeviceEnumerator();
//获取音频输出设备
IEnumerable<MMDevice> speakDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).ToArray();
if (speakDevices.Count() > 0)
{
MMDevice mMDevice = speakDevices.ToList()[0];
volume = Convert.ToInt16(mMDevice.AudioEndpointVolume.MasterVolumeLevelScalar * 100);
}
return volume;
}
private void button8_Click_1(object sender, EventArgs e)
{
// “设置扬声器音”按键代码
string ret = "";
int volnum = Convert.ToInt16(textBox2.Text);
if (volnum > 100)
ret = "音量不能超过100";
else
ret = SetCurrentSpeakerVolume(volnum);
}
private string SetCurrentSpeakerVolume(int volume)
{
string ret = "";
var enumerator = new MMDeviceEnumerator();
IEnumerable<MMDevice> speakDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).ToArray();
if (speakDevices.Count() > 0)
{
MMDevice mMDevice = speakDevices.ToList()[0];
mMDevice.AudioEndpointVolume.MasterVolumeLevelScalar = volume / 100.0f;
ret = "设置扬声器音量为[" + volume + "]成功!";
}
else
ret = "未检测到扬声器";
return ret;
}
此时的初始化代码:
// 初始化
public void init()
{
button1.Enabled = true;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
comboBox1.Items.Clear();
isVideo = false;
comboBox1.Text = "";
button5.Enabled = true;
button6.Enabled = true;
button7.Enabled = true;
button8.Enabled = true;
label1.Text = "待检测";
label2.Text = "待检测";
textBox2.Text = "";
textBox1.Text = "";
}
2、运行结果
三、源码地址