AForge опыт и манипулирование файлами

Всем утро,

Кто-нибудь здесь имеет опыт использования приложений AForge и видео или веб-камеры?

Существует файл.cs с именем VideoCaptureDeviceForm, который является частью AForge.DirectShow, который предоставляет способ выбора локального видеоустройства, т.е. веб-камеры.

Я хочу иметь возможность автоматически обнаруживать и запускать веб-камеру на моем компьютере, но появляется диалоговое окно с просьбой выбрать веб-камеру. Мне нужен способ как-то обойти это или автоматически нажать кнопку ОК.

Диалоговое окно

Ошибка приложения

Я пытался использовать SendKeys.Send("{ENTER}") в методе кнопки открытого диалогового окна, т.е. запустить камеру, но я получаю ошибки.

В VideoCaptureDeviceForm.cs есть метод okButton_Click, и следующая идея - манипулировать этим, чтобы сделать то, что я хочу, чтобы приложение делало.

К сожалению, у меня нет опыта, чтобы понять это. Кто-нибудь может посоветовать, как это сделать или что мне делать дальше? Спасибо.

VideoCaptureDeviceForm.cs ниже:

using System;
using System.Threading;
using System.Windows.Input;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;
using Accord.Video.FFMPEG;
using AForge.Video.VFW;

namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
    private FilterInfoCollection VideoCaptureDevices;
    private VideoCaptureDevice FinalVideo = null;
    private VideoCaptureDeviceForm captureDevice;
    private Bitmap video;
    private VideoFileWriter FileWriter = new VideoFileWriter();
    private SaveFileDialog saveAvi;

    public Form1()
    {
        InitializeComponent();


        Start_Vid();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
        captureDevice = new VideoCaptureDeviceForm();

    }

    void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
    {
        if (Stop.Text == "Stop Record")
        {
            video = (Bitmap)eventArgs.Frame.Clone();
            pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
            //AVIwriter.Quality = 0;
            FileWriter.WriteVideoFrame(video);
            //AVIwriter.AddFrame(video);
        }
        else
        {
            video = (Bitmap)eventArgs.Frame.Clone();
            pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
        }
    }

    private void Stop_Vid()
    {
        if (Stop.Text == "Stop Record")
        {
            Stop.Text = "Stop";
            if (FinalVideo == null)
            { return; }
            if (FinalVideo.IsRunning)
            {
                //this.FinalVideo.Stop();
                FileWriter.Close();
                //this.AVIwriter.Close();
                pictureBox1.Image = null;
            }
        }
        else
        {
            this.FinalVideo.Stop();
            FileWriter.Close();
            //this.AVIwriter.Close();
            pictureBox1.Image = null;
        }
    }
    private void butstop_Click(object sender, EventArgs e)
    {
        if (Stop.Text == "Stop Record")
        {
            Stop.Text = "Stop";
            if (FinalVideo == null)
            { return; }
            if (FinalVideo.IsRunning)
            {
                //this.FinalVideo.Stop();
                FileWriter.Close();
                //this.AVIwriter.Close();
                pictureBox1.Image = null;
            }
        }
        else
        {
            this.FinalVideo.Stop();
            FileWriter.Close();
            //this.AVIwriter.Close();
            pictureBox1.Image = null;
        }
    }

    private void button3_Click(object sender, EventArgs e)
    {
        pictureBox1.Image.Save("IMG" + DateTime.Now.ToString("hhmmss") + ".jpg");
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (FinalVideo == null)
        { return; }
        if (FinalVideo.IsRunning)
        {
            this.FinalVideo.Stop();
            FileWriter.Close();
            //this.AVIwriter.Close();
        }
    }

    private void Save_Click(object sender, EventArgs e)
    {
        saveAvi = new SaveFileDialog();
        saveAvi.Filter = "Avi Files (*.avi)|*.avi";
        saveAvi.FileName = "New Vid1";

        if (saveAvi.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            int h = captureDevice.VideoDevice.VideoResolution.FrameSize.Height;
            int w = captureDevice.VideoDevice.VideoResolution.FrameSize.Width;
            FileWriter.Open(saveAvi.FileName, w, h, 25, VideoCodec.Default, 5000000);
            FileWriter.WriteVideoFrame(video);


            //AVIwriter.Open(saveAvi.FileName, w, h);
            Stop.Text = "Stop Record";
            //FinalVideo = captureDevice.VideoDevice;
            //FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
            //FinalVideo.Start();
        }


    }

    //##############################################//
    //        Method not working        //
    //##############################################//

    private void Start_Vid()
    {
        SendKeys.Send("{ENTER}");
        if (captureDevice.ShowDialog(this) == DialogResult.OK)
        {

            VideoCaptureDevice videoSource = captureDevice.VideoDevice;
            FinalVideo = captureDevice.VideoDevice;
            FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
            FinalVideo.Start();
        }
    }

    //##############################################//
    //        Method working            //
    //##############################################//

    private void Start_Click(object sender, EventArgs e)
    {
        SendKeys.Send("{ENTER}");
        if (captureDevice.ShowDialog(this) == DialogResult.OK)
        {
            VideoCaptureDevice videoSource = captureDevice.VideoDevice;
            FinalVideo = captureDevice.VideoDevice;
            FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
            FinalVideo.Start();
        }
    }
    private void Close_Click(object sender, EventArgs e)
    {
        this.Close();
    }
}

}

2 ответа

1) Во-первых, вам нужно найти все устройства веб-камеры, подключенные к вашей системе.

public FilterInfoCollection LoaclWebCamsCollection  = new FilterInfoCollection(FilterCategory.VideoInputDevice);

2) Затем какую веб-камеру вы хотите использовать, выберите "MonikerString" этой веб-камеры

    VideoCaptureDevice videoSource = new VideoCaptureDevice(LoaclWebCamsCollection["Select webcam you want to user"].MonikerString);
                      OR
    VideoCaptureDevice videoSource = new VideoCaptureDevice(LoaclWebCamsCollection[0].MonikerString);




private void Start_Vid()
{
    FinalVideo = new 
    VideoCaptureDevice(LoaclWebCamsCollection[0].MonikerString);
    FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
    FinalVideo.Start();
}

Весь код для VB.NET; ему нужен фотобокс, таймер и кнопка,

      Imports System.Drawing.Imaging
Imports AForge.Video.DirectShow

Public Class Form1
    Private videoSource As VideoCaptureDevice = Nothing
    Private videoSourcePlayer As AForge.Controls.VideoSourcePlayer = Nothing

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim videoDevices As FilterInfoCollection = New FilterInfoCollection(FilterCategory.VideoInputDevice)
        videoSource = New VideoCaptureDevice(videoDevices.Item(0).MonikerString)
        videoSourcePlayer = New AForge.Controls.VideoSourcePlayer()
        videoSourcePlayer.VideoSource = videoSource
        videoSourcePlayer.Start()
    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
        ' Stop playing
        videoSourcePlayer.Stop()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Timer1.Enabled Then
            Timer1.Enabled = False
        Else
            Timer1.Enabled = True
        End If


    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Dim bitmap As Bitmap = videoSourcePlayer.GetCurrentVideoFrame()
        PictureBox1.Image = bitmap
    End Sub
End Class
Другие вопросы по тегам