需求分析
现如今,拍照已经融入我们的日常生活中了。我们在日常的工作生活中很多场景都会用到拍照功能。比如在登录网页或者设备时,密码错误进行拍照,防止被盗。日常进行图像识别或者图像处理前的图像获取。都需要用到我们的摄像头进行图像的获取。
前期准备
- 带摄像头的电脑
- Visual Studio 2019
- AForge.NET Framework库文件
设计流程
- 首先我们在Visual Studio 2019创建一个工程
- 添加引用文件(不会使用AForge.NET Framework可以搜一下,网上例子很多)
- 设计自己的相关页面,其中关键在于videoSourcePlayer。这是引用文件里的
- 进行相关程序的编写,程序我放在后面。
- 运行打包
实现效果
页面布局
点击连接,连接到自己电脑的摄像头
点击拍照,拍照成的图像,将保存在你防止的文件夹里。保存的文件夹在GetImagePath()函数里可以这样写
- <blockquote style="text-align: left;"><div style="text-align: left;">
- private string GetImagePath()
- {
- string personImgPath = "D:\\图片";
- if (!Directory.Exists(personImgPath))
- {
- Directory.CreateDirectory(personImgPath);
- }
- return personImgPath;
- }
命名(string picName = GetImagePath() + "\\" + "xiaosy" + ".jpg";)
重要代码
- <div style="text-align: left;">
- 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;
- }
谢谢