C# 如何更改DirectShow视频的亮度?
首先,让我先说我对DirectShow几乎一无所知。但我的任务是调整从帧采集卡捕获的视频的亮度 我使用的是DirectShow.NET和WPFMediaKit,所以我就是这样获得视频的:C# 如何更改DirectShow视频的亮度?,c#,wpf,directshow,directshow.net,C#,Wpf,Directshow,Directshow.net,首先,让我先说我对DirectShow几乎一无所知。但我的任务是调整从帧采集卡捕获的视频的亮度 我使用的是DirectShow.NET和WPFMediaKit,所以我就是这样获得视频的: DirectShowLib.DsDevice[] allDevices = WPFMediaKit.DirectShow.Controls.MultimediaUtil.VideoInputDevices; DirectShowLib.DsDevice dev = allDevices.ElementAt(0)
DirectShowLib.DsDevice[] allDevices = WPFMediaKit.DirectShow.Controls.MultimediaUtil.VideoInputDevices;
DirectShowLib.DsDevice dev = allDevices.ElementAt(0);
这是我调整亮度的方式:
//Get the IAMVideoProcAmp
object o;
Guid IID_IBaseFilter = new Guid("56a86895-0ad4-11ce-b03a-0020af0ba770");
dev.Mon.BindToObject(null, null, ref IID_IBaseFilter, out o);
DirectShowLib.IAMVideoProcAmp vpa = (DirectShowLib.IAMVideoProcAmp)o;
//Get the flags
int pMin, pMax, pSteppingDelta, pDefault, pCurrent;
DirectShowLib.VideoProcAmpFlags pFlags;
vpa.GetRange(DirectShowLib.VideoProcAmpProperty.Brightness, out pMin, out pMax, out pSteppingDelta, out pDefault, out pFlags);
vpa.Get(DirectShowLib.VideoProcAmpProperty.Brightness, out pCurrent, out pFlags);
//Set the slider
brightnessSlider.Maximum = pMax;
brightnessSlider.Minimum = pMin;
brightnessSlider.Value = pCurrent;
该代码对我的网络摄像头有效。但是,当我尝试在来自帧采集卡的视频上执行此操作时,它会显示以下错误:
无法将“System.\u ComObject”类型的COM对象强制转换为接口类型“DirectShowLib.IAMVideoProcAmp”。此操作失败,因为对IID为“{C6E13360-30AC-11D0-A18C-00A0C9118956}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT的异常:0x80004002(E_NOINTERFACE))。
。。。在这一行:
DirectShowLib.IAMVideoProcAmp vpa = (DirectShowLib.IAMVideoProcAmp)o;
您知道如何修复或调整来自frame grabber卡的此视频的亮度吗?有两种更改亮度的方法:
//Get the IAMVideoProcAmp
object o;
Guid IID_IBaseFilter = new Guid("56a86895-0ad4-11ce-b03a-0020af0ba770");
dev.Mon.BindToObject(null, null, ref IID_IBaseFilter, out o);
DirectShowLib.IAMVideoProcAmp vpa = (DirectShowLib.IAMVideoProcAmp)o;
//Get the flags
int pMin, pMax, pSteppingDelta, pDefault, pCurrent;
DirectShowLib.VideoProcAmpFlags pFlags;
vpa.GetRange(DirectShowLib.VideoProcAmpProperty.Brightness, out pMin, out pMax, out pSteppingDelta, out pDefault, out pFlags);
vpa.Get(DirectShowLib.VideoProcAmpProperty.Brightness, out pCurrent, out pFlags);
//Set the slider
brightnessSlider.Maximum = pMax;
brightnessSlider.Minimum = pMin;
brightnessSlider.Value = pCurrent;
iamdevideoprocamp
接口,该接口可能支持亮度调整,如果您同时具备上述两种功能,则可以控制所捕获视频的亮度您的想法-是时候学习您的工作和阅读文档了?IUn—特别是用于抓取卡的驱动程序—它应该告诉您它支持哪些接口。显然,它不支持IAMDevideoProCamp,但它应该有一些亮度设置界面。我们真的帮不了你-你甚至不能告诉我们那是什么硬件。