如何在C#中获取网络摄像头图像?

4

我正在使用C#和.Net4.0开发在线视频会议项目。

我想要一个可以用来以不同形式收集每秒网络摄像头图像的库或代码。我尝试使用AVICAP32实现这个目标,其中我们发送不同目的的消息比如复制或编辑帧,但是在创建处理程序时需要传递picturebox的引用,如下所示:

mCapHwnd = capCreateCaptureWindowA("0", 268435456 | 1073741824, 0, 0, 640, 480,picturebox1.Handle.ToInt32(), 0);

使用这些命令,我能够捕获图像,但问题在于当我最小化图片框架时。那时不会创建新图像。
我认为这是因为我最小化了表单,当它从剪贴板复制图像时,它什么也没有显示。
如何解决这个问题。任何类型的帮助将不胜感激。
谢谢 srdusad

你在谷歌上搜索“webcam c#”有没有找到有效的结果? - PatrickSteele
@ Patrick:目前我正在使用 AVICAP32.dll,这对我很有效。但我的问题是,我想在不同的表单中使用摄像头图像。但是使用 AVICAP32.dll 我们必须绑定 picturebox 处理程序以获取图片。当我最小化表单时,它不会发送任何内容到其他系统。我也尝试过一些其他的库,如 WIA 和 directshow,但我从它们那里得到的帮助不多。 - SR Dusad
3个回答

8
我已经使用所有提到的技术(WIA,AviCap和DirectShow)完成了此操作。 DirectShow是最佳选择。请查看免费的DirectShowNet库,它是DirectShow的.NET封装器,甚至包括示例:http://directshownet.sourceforge.net/ 更新2012-07-26:我刚刚发布了我的Windows应用程序CamTimer的完整源代码(使用.NET / C#编写)。在https://github.com/johanssonrobotics/CamTimer上下载/查看完整代码(带有工作的Webcam示例)。

感谢您提出的意见。我已从上面的链接下载了文件,示例运行非常完美。但是我还不能将其用于其他表单,以便我可以在两种形式下查看相同的图片而不会有任何依赖性。请给我任何想法,如何使用DirectShow在多个表单中显示图片。 - SR Dusad
当我将示例的框架从2.0更改为4.0时,它会在sourceFilter = FindCaptureDevice();上给我错误提示,请告诉我如何在.NET 4.0中使用DirectShow示例。 - SR Dusad
很高兴听到它正在工作(即使只是部分地)!您应该尝试在SourceForge的专用DirectShowNet论坛中提出这个问题,我相信开发人员更适合回答:http://sourceforge.net/projects/directshownet/forums/forum/460697 - Fredrik Johansson
嗨,Fedrik:示例在 .Net3.5 上正常工作,但当我将版本更改为 .Net4.0 时,在 public IBaseFilter FindCaptureDevice() 函数中的 moniker[0].BindToObject(null, null, ref iid, out source); 处出现错误。请帮助我,因为我想在 .Net4.0 中使用 DirectShownet。 - SR Dusad
表面相机可以用于它吗? - Asadullah Ali
显示剩余2条评论

0

如果您感到舒适,可以使用VLC来处理此问题。VLC提供了处理网络摄像头的功能。


谢谢您的回复!我想在不同窗体的图片框中显示这些抓取的图片。如果VLC有帮助,那么请指导我如何在我的.NET代码中使用VLC以及我需要哪个dll。 - SR Dusad
你可以使用为.NET创建的VLC包装器。你可以前往VLC网站,也可以在VLC开发者论坛寻求帮助。 - Ram

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接