Próbuję napisać aplikację, która może uzyskać dostęp do kamer podłączonych do komputera, nagrać wideo i uzyskać obraz z wideo. Używam bibliotek AForge.NET do uzyskiwania dostępu do kamer: http://www.aforgenet.com/framework/Pobierz obraz z wideo
Nie wiem, jak działa wydarzenie o nazwie AForge.Video.NewFrameEventHandler. W tym kodzie zdarzenie zwraca wartość null do bitmapy zamiast nowej klatki z wideo lub zdarzenie nie jest wywoływane. Chcę, aby klatki z filmu do ramki na zdjęcia za każdym razem, aby zrobić coś jak strumień wideo i po kliknięciu przycisku Stop chcę, aby ostatni obraz pozostaje wyświetlany w polu graficznym. Czy ktoś wie jak? I dlaczego mój kod nie działa?
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AForge.Video.DirectShow;
using System.Drawing;
using AForge.Video;
namespace CameraDevice
{
public class CameraImaging
{
// enumerate video devices
public FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
//camera
public VideoCaptureDevice videoSource;
//screen shot
public Bitmap bitmap;
public CameraImaging()
{
// create video source
VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[0].MonikerString);
// set NewFrame event handler
videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
}
public void StartVideo(VideoCaptureDevice videoSource)
{
// start the video source
videoSource.Start();
// ...
}
public void StopVideo(VideoCaptureDevice videoSource)
{
// stop the video source
videoSource.Stop();
// ...
}
private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
// get new frame
bitmap = eventArgs.Frame;
// process the frame
}
}
}
Podobny kod jest tutaj: http://www.aforgenet.com/framework/features/directshow_video.html[ ^]
W Windows Forms uruchomić ten film w wątku, który czyni tę metodę:
private void VideoRecording()
{
camImg.videoSource.Start();
while (!StopVideo)
{
pictureBox1.Image = camImg.bitmap;
pictureBox1.Invalidate();
}
camImg.videoSource.Stop();
}
AForge.NET wykorzystuje natywny interfejs API DirectShow do uzyskiwania dostępu do sprzętu przechwytywania wideo.Zamiast tego możesz zajrzeć do biblioteki [DirectShow.NET] (http://directshownet.sourceforge.net/), która jest najczęściej używanym "pomostem" pomiędzy aplikacjami .NET i interfejsami API do przechwytywania wideo. –