摄像头拍照功能是怎样实现的?自己动手做一个!
Posted 跋扈洋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了摄像头拍照功能是怎样实现的?自己动手做一个!相关的知识,希望对你有一定的参考价值。
需求分析
现如今,拍照已经融入我们的日常生活中了。我们在日常的工作生活中很多场景都会用到拍照功能。比如在登录网页或者设备时,密码错误进行拍照,防止被盗。日常进行图像识别或者图像处理前的图像获取。都需要用到我们的摄像头进行图像的获取。
前期准备
设计流程
- 首先我们在Visual Studio 2019创建一个工程
- 添加引用文件(不会使用AForge.NET Framework可以搜一下,网上例子很多)
- 设计自己的相关页面,其中关键在于videoSourcePlayer。这是引用文件里的
- 进行相关程序的编写,程序我放在后面。
- 运行打包(下面有我打包好的软件,可以点击看看运行结果)
实现效果
- 页面布局
- 点击连接,连接到自己电脑的摄像头
- 点击拍照,拍照成的图像,将保存在你防止的文件夹里。
保存的文件夹在GetImagePath()
函数里
可以这样写
private string GetImagePath()
{
string personImgPath = "D:\\\\图片";
if (!Directory.Exists(personImgPath))
{
Directory.CreateDirectory(personImgPath);
}
return personImgPath;
}
命名(string picName = GetImagePath() + "\\\\" + "xiaosy" + ".jpg";
)
重要代码
private void btnConnect_Click(object sender, EventArgs e)
{
CameraConn();
}
//连接摄像头
private void CameraConn()
{
VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString);
videoSource.DesiredFrameSize = new System.Drawing.Size(320, 240);
videoSource.DesiredFrameRate = 1;
videoSourcePlayer.VideoSource = videoSource;
videoSourcePlayer.Start();
}
//关闭摄像头
private void btnClose_Click(object sender, EventArgs e)
{
videoSourcePlayer.SignalToStop();
videoSourcePlayer.WaitForStop();
}
//主窗体关闭
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
btnClose_Click(null, null);
}
//拍照
private void Photograph_Click(object sender, EventArgs e)
{
try
{
if (videoSourcePlayer.IsRunning)
{
BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
videoSourcePlayer.GetCurrentVideoFrame().GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
PngBitmapEncoder pE = new PngBitmapEncoder();
pE.Frames.Add(BitmapFrame.Create(bitmapSource));
string picName = GetImagePath() + "\\\\" + "xiaosy" + ".jpg";
if (File.Exists(picName))
{
File.Delete(picName);
}
using (Stream stream = File.Create(picName))
{
pE.Save(stream);
}
//拍照完成后关摄像头并刷新同时关窗体
if (videoSourcePlayer != null && videoSourcePlayer.IsRunning)
{
videoSourcePlayer.SignalToStop();
videoSourcePlayer.WaitForStop();
}
this.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("摄像头异常:" + ex.Message);
}
}
private string GetImagePath()
{
string personImgPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)
+ Path.DirectorySeparatorChar.ToString() + "PersonImg";
if (!Directory.Exists(personImgPath))
{
Directory.CreateDirectory(personImgPath);
}
return personImgPath;
}
源码及程序整合
后续
如果想了解更多物联网、智能家居项目知识,可以关注我的程序设计专栏。
订阅专栏后,可以在微信公众号上私聊我,直接发给你源码。
或者关注公众号。
编写不易,感谢支持。
以上是关于摄像头拍照功能是怎样实现的?自己动手做一个!的主要内容,如果未能解决你的问题,请参考以下文章