2012-10-27 64 views
0

我有以下代碼,它捕獲視頻並更新jpg速度非常快。捕獲幀不是視頻AForge C#ASP.NET

我需要做的是改變這捕捉每x秒一幀,這樣我可以做其他的東西給它,就像解碼條碼:

using AForge.Video; 
using AForge.Video.DirectShow; 

namespace BAMSystem 
{ 
public partial class WebForm1 : System.Web.UI.Page 
{ 
    public int FrameRate { get; set; } 

    private FilterInfoCollection VideoCaptureDevices; 
    private VideoCaptureDevice FinalVideo; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     inputDevices.Items.Clear(); 

     VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); 
     foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices) 
     { 
      inputDevices.Items.Add(VideoCaptureDevice.Name); 
     } 
     inputDevices.SelectedIndex = 0; 

     FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[inputDevices.SelectedIndex].MonikerString); 
     FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame); 

    } 

    public void Start_OnClick(object sender, EventArgs e) 
    { 
       FinalVideo.Start(); 
    } 

    void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs) 
    { 
       Bitmap video = (Bitmap)eventArgs.Frame.Clone(); 
       video.Save("C:\\Users\\Wayneio\\Desktop\\image\\live.jpg"); 
    } 
    public void Stop_OnClick(object sender, EventArgs e) 
    { 
     if (FinalVideo.IsRunning) 
     { 
      FinalVideo.SignalToStop(); 
      FinalVideo.Stop(); 
     } 
    } 

回答

0

首先設置videoCaptureDevice.desiredFrameRate這應該使NewFrameEventHandler每秒運行一次。 然後讓NewFrameEventHandler在num之後做一些事情。秒(跳過或幀)你想要的。

0

如果您的相機不支持設置幀速率 您可能會使用全局變量,並且只有在該值= true時纔會執行 ,您可以通過Visual Studio中的簡單定時器事件來執行此操作。

void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs) 
    { if(mytimedevent) { 
        Bitmap video = (Bitmap)eventArgs.Frame.Clone(); 
        video.Save("C:\\Users\\Wayneio\\Desktop\\image\\live.jpg"); 
        } 
    mytimedevent!=mytimedevent // or set it simply to false. 
    } 

您也可以更改mytimedevent的valeu根據您的其他計算如果那是完成了它能夠爲true,並且運行時,它設置爲false