用c#实现摄像头连接和拍照及麦克风、扬声器音量获取及设置

目录

一、摄像头连接和拍照

1.创建新项目,添加AForge的6个包

2.绘制窗体及添加代码

3、运行结果 

二、麦克风、扬声器音量获取及设置

1、绘制窗体及添加代码

(1)麦克风

(2)扬声器

2、运行结果

三、源码地址


 

 

一、摄像头连接和拍照

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、运行结果

 

三、源码地址

window: windows程序设计作业

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值