Ich versuche eine Anwendung zu schreiben, die auf Kameras zugreifen kann, die mit dem PC verbunden sind, ein Video aufzeichnen und ein Bild von dem Video bekommen. Ich verwende AForge.NET-Bibliotheken für den Zugriff auf Kameras: http://www.aforgenet.com/framework/Get Image from Video
Ich weiß nicht, wie das Ereignis namens AForge.Video.NewFrameEventHandler funktioniert. In diesem Code gibt das Ereignis null zu einer Bitmap statt eines neuen Rahmens aus einem Video zurück, oder das Ereignis wird nicht aufgerufen. Ich möchte jedes Mal Frames aus dem Video in ein Bildfeld ziehen, um so etwas wie einen Videostream zu erstellen, und nach dem Klicken auf den Stopp-Button möchte ich, dass das letzte Bild im Bildfenster angezeigt wird. Weiß jemand wie? Und warum funktioniert mein Code nicht?
Code:
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
}
}
}
Der ähnliche Code ist hier: http://www.aforgenet.com/framework/features/directshow_video.html[ ^]
In dem Windows Forms ich dieses Video in einem Thread ausgeführt, die diese Methode funktioniert:
private void VideoRecording()
{
camImg.videoSource.Start();
while (!StopVideo)
{
pictureBox1.Image = camImg.bitmap;
pictureBox1.Invalidate();
}
camImg.videoSource.Stop();
}
AForge.NET verwendet systemeigene DirectShow-API für den Zugriff auf Video Capture-Hardware.Möglicherweise möchten Sie stattdessen die [DirectShow.NET] (http://directshownet.sourceforge.net/) -Bibliothek aufrufen, die die am häufigsten verwendete "Brücke" zwischen .NET-Anwendungen und Video-Capture-APIs darstellt. –