发布于2026-07-19 阅读(0)
扫一扫,手机访问
先别说能不能直接用,先确认你的目标平台和SDK版本。用AForge.Video.DirectShow调用本地摄像头拍照,原则上可行,但有个大前提:它早就停止维护了。.NET Core或.NET 5以上的项目没法原生跑,Windows 11上部分设备驱动也不兼容。所以,别一上来就踩坑,平台和版本得先理清楚。
这是最常卡住的第一步。代码大概率没写错,问题很可能出在权限或驱动上。
一个简单的验证方法:运行GraphEdit(Windows SDK工具),看看能否列出“Video Capture Source”节点。如果那里都看不到设备,就不是代码的问题了。
这本质上是视频格式协商失败。AForge默认尝试RGB24,但很多摄像头只支持MJPG或YUY2。
new VideoCapabilities(640, 480, "MJPG")。device.DesiredFrameSize = new Size(640, 480); device.DesiredFrameRate = 15;。AForge的Bitmap输出默认是BGR通道顺序(OpenCV风格),而Sa ve方法按RGB处理,结果就是色偏或颜色异常。
bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);(翻转Y轴修复镜像问题)。var rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
var clone = bitmap.Clone(rect, PixelFormat.Format24bppRgb);
clone.Sa ve("photo.jpg", ImageFormat.Jpeg);
clone.Dispose();
另外,别在NewFrame事件中频繁调用Sa ve。IO阻塞会导致帧率暴跌甚至程序崩溃,加个简单锁或队列缓冲会好很多。
真正麻烦的不是调用逻辑本身,而是AForge对UVC协议新设备的支持已经断层,对ARM64 Windows零适配,和现代.NET生命周期管理(如Dispose时机)也有冲突。如果项目需要长期维护,最好把拍照模块隔离成独立的.NET Framework 4.8进程,主程序通过命名管道通信。别让整个应用被一个过时框架拖住升级节奏。

售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8