PC に接続されたカメラにアクセスし、ビデオを録画し、ビデオから画像を取得できるアプリケーションを作成しようとしています。AForge.NET ライブラリを使用してカメラにアクセスします: http://www.aforgenet.com/framework/
AForge.Video.NewFrameEventHandler という名前のイベントがどのように機能するかわかりません。このコードでは、イベントはビデオからの新しいフレームではなく、ビットマップに null を返します。または、イベントは呼び出されません。ビデオストリームのようなものを作成するためにフレームごとにビデオからピクチャボックスにフレームを取得したいのですが、停止ボタンをクリックした後、最後の画像がピクチャボックスに表示されたままになります。誰も方法を知っていますか?そして、なぜ私のコードが機能しないのですか?
コード:
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
}
}
}
同様のコードはこちら: http://www.aforgenet.com/framework/features/directshow_video.html[ ^]
Windows フォームでは、このメソッドを実行するスレッドでこのビデオを実行します。
private void VideoRecording()
{
camImg.videoSource.Start();
while (!StopVideo)
{
pictureBox1.Image = camImg.bitmap;
pictureBox1.Invalidate();
}
camImg.videoSource.Stop();
}