首页 / C# / 无法使用C#更改视频捕获分辨率
无法使用C#更改视频捕获分辨率
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了无法使用C#更改视频捕获分辨率,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2050字,纯文字阅读大概需要3分钟。
内容图文
![无法使用C#更改视频捕获分辨率](/upload/InfoBanner/zyjiaocheng/653/aa69ffe9dec04b2397a0ee1f38328350.jpg)
我正在尝试使用C#中的DirectShowNet更改默认的网络摄像头分辨率,根据我的收集,我需要通过调用Windows win32 api dll中的内置VideoInfoHeader类进行AVI捕获来更改它.我从DirectShowNet获得以下代码:
hr = capGraph.SetFiltergraph( graphBuilder );
if( hr < 0 )
Marshal.ThrowExceptionForHR( hr );
AMMediaType media = new AMMediaType();
media.majorType = MediaType.Video;
media.subType = MediaSubType.RGB24;
media.formatType = FormatType.VideoInfo; // ???
hr = sampGrabber.SetMediaType(media);
if (hr < 0)
Marshal.ThrowExceptionForHR(hr);
hr = graphBuilder.AddFilter( capFilter, "Ds.NET Video Capture Device" );
if( hr < 0 )
Marshal.ThrowExceptionForHR( hr );
DsUtils.ShowCapPinDialog( capGraph, capFilter, this.Handle );
Guid sub = MediaSubType.Avi;
hr = capGraph.SetOutputFileName( ref sub, fileName, out mux, out sink );
if( hr < 0 )
Marshal.ThrowExceptionForHR( hr );
Guid cat = PinCategory.Capture;
Guid med = MediaType.Video;
hr = capGraph.RenderStream( ref cat, ref med, capFilter, null, mux ); // stream to file
if( hr < 0 )
Marshal.ThrowExceptionForHR( hr );
media = new AMMediaType();
hr = sampGrabber.GetConnectedMediaType(media);
if (hr < 0)
Marshal.ThrowExceptionForHR(hr);
if ((media.formatType != FormatType.VideoInfo) || (media.formatPtr == IntPtr.Zero))
throw new NotSupportedException("Unknown Grabber Media Format");
videoInfoHeader = (VideoInfoHeader)Marshal.PtrToStructure(media.formatPtr, typeof(VideoInfoHeader));
Marshal.FreeCoTaskMem(media.formatPtr); media.formatPtr = IntPtr.Zero;
问题是我无法访问videoInfoHeader,因为在这一行:hr = sampGrabber.GetConnectedMediaType(media);
它会说hr小于0,因此引发此错误:接口有太多方法可以触发事件(HRESULT的异常:0x80040209)
它不会读取VideoInfoHeader位,因此我无法更改网络摄像头捕获的分辨率,有人知道更好的方法或解决此问题的方法吗?
解决方法:
确保在查找HR错误代码时使用的是DirectShow Error and Success Code list,而不是常规HR代码列表.您将从该列表中看到0x80040209的实际含义是:
VFW_E_NOT_CONNECTED The operation cannot be performed because the pins are not connected.
看起来您的图形未连接样品采集器过滤器.确保将样品采集卡传递给RenderStream.
内容总结
以上是互联网集市为您收集整理的无法使用C#更改视频捕获分辨率全部内容,希望文章能够帮你解决无法使用C#更改视频捕获分辨率所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。