问题 保存网络摄像头拍摄的照片

Simo87

新成员
已加入
2016年11月26日
留言内容
1
编程经验
Beginner
大家,早安,
我是这个论坛的新手,还是初学者。
我使用Visual Studio 2015在C#中创建了一个程序,只需按一下按钮就可以打开网络摄像头,捕捉图片并将其显示在图片框上;我根据在线找到的代码改编了所示的解决方案,但最终的好处是:我想,一旦按下按钮,照片就会自动保存在特定的文件夹中;我以前在网络摄像头上执行操作的框架是Aforge,但坦率地说,我从库(aforge)的在线文档中不了解如何执行我刚刚描述的操作。你能帮我吗?
我在这里粘贴我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AForge.Video.DirectShow;
using AForge.Video.VFW;
using AForge.Video;
//using System.IO;

namespace RiconoscimentoUtente2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        bool catturaFrame = false;
        VideoCaptureDevice webcam = null;
        Graphics superficieScatto = null;
        Rectangle rettangolo;

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            superficieScatto = Scatto.CreateGraphics();
            rettangolo = Scatto.ClientRectangle;
            catturaFrame = true;
            if (webcam == null)
            {
                webcam = new VideoCaptureDevice("@device:pnp:\\\\?\\usb#vid_04f2&pid_b40e&mi_00#7&97d73eb&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global");

                webcam.NewFrame += new NewFrameEventHandler(fotogramma);
                webcam.Start();
            }

            using (System.IO.StreamWriter file =
                        new System.IO.StreamWriter(@"C:\Users\XXXXX pc\Desktop\RICONOSCIMENTO\SI.txt", true))
            {
                //file.WriteLine("+++++");
                MessageBox.Show("Ciao ZZZ!!!");
                file.WriteLine(DateTime.Now);
                //file.WriteLine();
                file.WriteLine("+++++");



            }

            Application.Exit();
            webcam.Stop();
            //MessageBox.Show("Ciao ZZZZ!!!");
            //this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            superficieScatto = Scatto.CreateGraphics();
            rettangolo = Scatto.ClientRectangle;
            catturaFrame = true;
            if (webcam == null)
            {
                webcam = new VideoCaptureDevice("@device:pnp:\\\\?\\usb#vid_04f2&pid_b40e&mi_00#7&97d73eb&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global");

                webcam.NewFrame += new NewFrameEventHandler(fotogramma);
                webcam.Start();

            }

            using (System.IO.StreamWriter file =
           new System.IO.StreamWriter(@"C:\Users\XXXXX pc\Desktop\RICONOSCIMENTO\NO.txt", true))
            {
                //file.WriteLine("+++++");
                MessageBox.Show("Salve Ospite!!!");
                file.WriteLine(DateTime.Now);
                //file.WriteLine();
                file.WriteLine("+++++");

            }

            Application.Exit();
            webcam.Stop();
        }

        void fotogramma(object sender, NewFrameEventArgs e)
        {
            if (catturaFrame)
            {
                superficieScatto.DrawImage(e.Frame, rettangolo);

                catturaFrame = false;
                //catturaFrame = true;
            }

        }
    }
    }


太感谢了
你好
西蒙
 
由主持人最后编辑:

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,072
地点
挪威
编程经验
10+
Bitmap.Save方法(System.Drawing)
e.Frame是一个位图,您可以将其分配给PictureBox.Image。无论如何,CreateGraphics都不是这样做的方式,如果要将位图绘制到控件上,则应使用Paint事件处理程序。
可以使用Save方法保存位图,使用e.Frame.Save或将e.Frame存储在变量中,然后保存。这也是您使用Paint事件处理程序的方式,您将从NewFrame事件处理程序中获取e.Frame并为其分配变量,然后刷新PictureBox,在Paint事件处理程序中您将绘制该变量的位图。
 
最佳 底部