C#-Winform - 调用笔记本摄像头实现拍照并保存

news/2024/11/14 1:05:28/

C#-Winform - 调用笔记本摄像头实现拍照并保存

文章目录

  • C#-Winform - 调用笔记本摄像头实现拍照并保存
  • 前言
  • 一、创建新项目并引用DLL
    • 添加途径
      • 1、上网下载(免费)
      • 2、管理NuGet程序包
  • 二、C#程序编写
    • 1.Winform页面编写
    • 2.程序编写
      • ① 首先创建所需要的定义
      • ②扫描电脑,获取摄像头数据(名称以及分辨率)
      • ③ 连接摄像头,并将画面反馈到vispShoot上
      • ④ 拍照
      • ⑤ 打开图片存储位置
      • ⑥ 关闭相机以及退出关闭


前言

本次程序参考C#-Winform - 调用摄像头实现拍照 原创程序鹏


一、创建新项目并引用DLL

本文中必备的DLL:AForge
Aforge

添加途径

1、上网下载(免费)

直接在官网上下载AForge.net库类官网下载地址
AForge.net库类下载
右击“引用”并选择“添加引用”,浏览选择出你所需要的DLL;
引用

2、管理NuGet程序包

右击“引用”,选择“管理NuGet程序包”,在“浏览”中搜索“Aforge”并下载安装。
管理NuGet程序包
Aforge搜索并下载

二、C#程序编写

1.Winform页面编写

添加控件,winform界面如下图所示。
winform界面

2.程序编写

① 首先创建所需要的定义

代码如下(示例):

private FilterInfoCollection videoDevices;//所有摄像设备
private VideoCaptureDevice videoDevice;//摄像设备
private VideoCapabilities[] videoCapabilities;//摄像头分辨率

②扫描电脑,获取摄像头数据(名称以及分辨率)

代码如下(示例):

         //程序运行时自动刷新private void Form1_Load(object sender, EventArgs e){videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);//得到机器所有接入的摄像设备if (videoDevices.Count != 0)//读取到摄像设备{foreach (FilterInfo device in videoDevices){cboVideo.Items.Add(device.Name);//把摄像设备添加到摄像列表中}}else{cboVideo.Items.Add("没有找到摄像头");}cboVideo.SelectedIndex = 0;//默认选择第一个if (videoDevices.Count != 0)//读取到摄像设备{//获取摄像头videoDevice = new VideoCaptureDevice(videoDevices[cboVideo.SelectedIndex].MonikerString);GetDeviceResolution(videoDevice);//获得摄像头的分辨率}}//获得摄像头的分辨率private void GetDeviceResolution(VideoCaptureDevice videoCaptureDevice){cboResolution.Items.Clear();//清空列表videoCapabilities = videoCaptureDevice.VideoCapabilities;//设备的摄像头分辨率数组foreach (VideoCapabilities capabilty in videoCapabilities){//把这个设备的所有分辨率添加到列表cboResolution.Items.Add($"{capabilty.FrameSize.Width} x {capabilty.FrameSize.Height}");}cboResolution.SelectedIndex = 0;//默认选择第一个}

③ 连接摄像头,并将画面反馈到vispShoot上

代码如下(示例):

        private void btnConnect_Click(object sender, EventArgs e){if (videoDevice != null)//如果摄像头不为空{videoDevice.VideoResolution = videoCapabilities[cboResolution.SelectedIndex];//摄像头分辨率vispShoot.VideoSource = videoDevice;//把摄像头赋给控件vispShoot.Start();//开启摄像头EnableControlStatus(false);}}//控件的显示切换private void EnableControlStatus(bool status){cboVideo.Enabled = status;cboResolution.Enabled = status;btnConnect.Enabled = status;btnPic.Enabled = !status;btnCut.Enabled = !status;}

④ 拍照

代码如下(示例):

        int i = 0;private void btnPic_Click(object sender, EventArgs e){if (vispShoot == null){return;}else{while(true){i++;//创建图像对象Bitmap img = vispShoot.GetCurrentVideoFrame();//拍照                    picbPreview.Image = img;//img.Save(filename, ImageFormat.Jpeg);//这里可以根据情况,把照片存到某个路径下string filename;if (fname.Text !=null){//创建图片filename = fname.Text;}else{//创建图片filename = $"拍照{i}";}img.Save($"文件存储位置/{filename}.png");break;}}}

⑤ 打开图片存储位置

代码如下(示例):

        private void saveadress_Click(object sender, EventArgs e){string filePath = @"文件存储位置";//文件(文件夹)路径System.Diagnostics.Process.Start(filePath);}

⑥ 关闭相机以及退出关闭

代码如下(示例):

        private void btnCut_Click(object sender, EventArgs e){DisConnect();//断开连接EnableControlStatus(true);}//关闭并释放private void DisConnect(){if (vispShoot.VideoSource != null){vispShoot.SignalToStop();vispShoot.WaitForStop();vispShoot.VideoSource = null;}}private void Form1_FormClosing(object sender, FormClosingEventArgs e){DisConnect();//关闭并释放}


http://www.ppmy.cn/news/271069.html

相关文章

使用MATLAB控制笔记本电脑的摄像头,并进行实时人脸检测和识别

FPGA教程目录 MATLAB教程目录 ----------------------------------------------------------------------- 目录 一、理论基础 二、核心程序 三、仿真测试结果 一、理论基础 人脸识别过程主要由四个阶段组成:人脸检测、图像预处理、面部特征提取和特征识别。首…

笔记本摄像头怎么打开?几个步骤轻松打开

大多数笔记本电脑都带有摄像头,XP/Win7系统的电脑,可以直接进入我的电脑来打开摄像头。随着电脑系统的升级,大多数人使用的都是Win10系统,那么Win10系统的笔记本摄像头怎么打开?方法很简单,主要看下面两个&…

缓存击穿、穿透、雪崩的区别和解决方法

1.缓存穿透 缓存穿透是指查询一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空。当用户使用这条不存在的数据疯狂发起查询请求的时候,对数据库造成的压力就非常大,甚至可能…

uView 2.X 的 picker 组件实现省市区县联动选择功能

uView 2.X 的 picker 组件实现省市区县联动选择功能 <template><view class"container"><view class"p-card"><view class"p-title"><text>收货地址信息</text></view><view class"" s…

iPhone自动接听和拒接来电设置方法「苹果教程」

在日常生活中&#xff0c;有时候会遇到不方便操作电话的场景&#xff0c;例如开车途中。如果不方便操作电话&#xff0c;可以启用iPhone的自动接听或者拒接电话功能。 一、自动拒接 首先打开设置并找到【勿扰模式】&#xff0c;在该页面下方找到【自动回复对象】&#xff0c;在…

jssip(呼叫,接听,重新协商等功能实现)

jssip(呼叫&#xff0c;接听&#xff0c;重新协商等功能实现) <template><div class"head"><a-button type"primary" click"call">call</a-button><a-button type"primary">answer</a-button>&l…

接听拨打电话没有声音而其他正常的解决办法

安卓手机接听拨打电话没有声音而其他运行正常&#xff0c;原因如下&#xff1a; 很多第三方软件开机加速会误把com.qualcomm.qti.telephonyservice这个软件自启给禁用了 我们把com.qualcomm.qti.telephonyservice这个软件自启打开&#xff0c;然后重启一下手机就行了&#xff0…

android 拨打电话、 监听来电、监听呼出电话的功能实现

demo1&#xff08;通用&#xff09;&#xff1a; 权限 <!-- 监听呼出电话 --> <uses-permission android:name"android.permission.PROCESS_OUTGOING_CALLS" /> <!-- 监听来电 --> <uses-permission android:name"android.per…