AForge.NET:未触发 NewFrameEventHandler 参数方法
Posted
技术标签:
【中文标题】AForge.NET:未触发 NewFrameEventHandler 参数方法【英文标题】:AForge.NET: NewFrameEventHandler argument method not triggered 【发布时间】:2021-10-22 22:10:37 【问题描述】:我正在尝试编写一个 Windows 控制台程序,该程序能够从网络摄像头或虚拟网络摄像头获取图像,从视频源中提取位图帧并将该帧作为位图文件保存到文件系统。
目前我使用一个名为 OBS Studio 的程序来模拟带有“虚拟相机”选项的视频源。
代码如下:
using System;
using AForge.Video.DirectShow;
using AForge.Video;
using System.Drawing;
namespace webcamc
class Program
FilterInfoCollection filterInfoCollection;
VideoCaptureDevice videoCaptureDevice;
Bitmap bitmap;
static void Main(string[] args)
var program = new Program();
program._init();
void _handleNewFrameEvent(object sender, NewFrameEventArgs eventArgs)
bitmap = new Bitmap(eventArgs.Frame);
void _init()
filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice);
videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[0].MonikerString);
videoCaptureDevice.Start();
videoCaptureDevice.NewFrame += new NewFrameEventHandler(_handleNewFrameEvent);
string ActiveDir = AppDomain.CurrentDomain.BaseDirectory;
string filepath = System.IO.Path.Combine(ActiveDir, @"C://Pic");
string fileName = System.IO.Path.Combine(filepath, @"name.bmp");
bool fileNotExists = !System.IO.File.Exists(fileName);
if (fileNotExists)
bitmap.Save(fileName);
不幸的是,我无法理解为什么我传递给NewFrameEventHandler
的_handleNewFrameEvent
方法没有被触发;我已经用调试器检查了代码并且没有命中断点。
我很确定正确获取了设备列表和设备名称。
但是我非常怀疑videoCaptureDevice
实例。我不确定,但它看起来没有正确实例化,因为所有 相关 值似乎都是 0。
Here is an image of the debugger showing the ill-instantiated video capture device
谁能指点我正确的方向?
谢谢。
【问题讨论】:
【参考方案1】:我会先将videoCaptureDevice.Start();
移到videoCaptureDevice.NewFrame += new NewFrameEventHandler(_handleNewFrameEvent);
下方,因为您只想在可以接收到新帧后开始运行相机源(但我不相信这会解决您的问题)。
可能网络摄像头启动时引发错误,因此添加vDevIn.VideoSourceError += new VideoSourceErrorEventHandler(errorHandler)
并使用以下函数查看是否引发任何错误:
private void errorHandler(object sender, VideoSourceErrorEventArgs eventArgs)
Console.WriteLine("Video feed source error: " + eventArgs.Description);
【讨论】:
您好,jakehowlet96,感谢您的回复。我已尝试实施您的两个建议,但没有发现任何改进或错误。我用videoCaptureDevice.VideoSourceError += new VideoSourceErrorEventHandler(errorHandler);
对吗?以上是关于AForge.NET:未触发 NewFrameEventHandler 参数方法的主要内容,如果未能解决你的问题,请参考以下文章
C# Aforge.net 在其他应用程序使用相同的相机时显示相机源