1

ウェブカメラでスナップショットを撮ろうとしています。これは私のコードです:

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 分ごとにスナップショットを取得しています。

4

2 に答える 2