ウェブカメラでスナップショットを撮ろうとしています。これは私のコードです:
using System;
using System.Text;
using System.Drawing;
using System.Threading;
using AForge.Video.DirectShow;
using AForge.Video;
namespace WebCamShot
{
class Program
{
static FilterInfoCollection WebcamColl;
static VideoCaptureDevice Device;
static void Main(string[] args)
{
WebcamColl = new FilterInfoCollection(FilterCategory.VideoInputDevice);
Console.WriteLine("Press Any Key To Capture Photo !");
Console.ReadKey();
Device = new VideoCaptureDevice(WebcamColl[0].MonikerString);
Device.NewFrame += Device_NewFrame;
Device.Start();
Console.ReadLine();
}
static void Device_NewFrame(object sender, NewFrameEventArgs e)
{
Bitmap Bmp = (Bitmap)e.Frame.Clone();
Bmp.Save("D:\\Foo\\Bar.png");
Console.WriteLine("Snapshot Saved.");
/*
Console.WriteLine("Stopping ...");
Device.SignalToStop();
Console.WriteLine("Stopped .");
*/
}
}
}
それはうまく機能しますが、今は自分のコードを使用して 1 分ごとにスナップショットを撮りたいと思っています。
このため、次のコード行を追加しました。Thread.Sleep(1000 * 60); // 1000 Milliseconds (1 Second) * 60 == One minute.
残念ながら、この行では期待どおりの結果が得られません。以前と同様にスナップショットを取得しますが、毎分ファイルに写真を保存するだけです。私が実際にやりたいことは、私のコードが「Device_NewFrame」イベントを 1 分ごとにトリガーすることです。
どうすればいいですか?喜んでお手伝いさせていただきます..ありがとうございます!
編集: Armen Aghajanyan が提供したように、コードにタイマーを追加しました。このタイマーは、1 分ごとにデバイス オブジェクトを初期化し、新しい Device オブジェクトを Device_NewFrame イベントに登録して、デバイスのアクティビティを開始します。その後、イベントの本文にある次のコードのコメントを外します。
Console.WriteLine("Stopping ...");
Device.SignalToStop();
Console.WriteLine("Stopped .");
現在、コードは 1 分ごとにスナップショットを取得しています。