C# 如何访问网络摄像头';DirectShow.Net中的s电源线补偿和背光补偿设置
我试图写一个程序,将设置网络摄像头设置根据存储的预设。我正在使用C#和DirectShow.Net。到目前为止,我能够访问所有的设置 要读取设置,我使用以下代码:C# 如何访问网络摄像头';DirectShow.Net中的s电源线补偿和背光补偿设置,c#,video,webcam,video-capture,directshow.net,C#,Video,Webcam,Video Capture,Directshow.net,我试图写一个程序,将设置网络摄像头设置根据存储的预设。我正在使用C#和DirectShow.Net。到目前为止,我能够访问所有的设置 要读取设置,我使用以下代码: DsDevice[] capDevices; // Get the collection of video devices capDevices = DsDevice.GetDevicesOfCat(FilterCategory
DsDevice[] capDevices;
// Get the collection of video devices
capDevices =
DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
// Select first camera
var dev = capDevices[0];
int hr;
IBaseFilter capFilter = null;
ICaptureGraphBuilder2 capGraph = null;
// Get the graphbuilder object
IFilterGraph2 m_FilterGraph = (IFilterGraph2)new FilterGraph();
try
{
// Get the ICaptureGraphBuilder2
capGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
/// Start building the graph
hr = capGraph.SetFiltergraph(m_FilterGraph);
DsError.ThrowExceptionForHR(hr);
// Add the video device
hr = m_FilterGraph.AddSourceFilterForMoniker(dev.Mon, null, "Video input", out capFilter);
DsError.ThrowExceptionForHR(hr);
int value;
// Reset settings
cameraSettings.Reset();
// Get IAMVideoProcAmp Values
IAMVideoProcAmp pVideoAmp = (IAMVideoProcAmp)capFilter;
VideoProcAmpFlags vpaFlags;
pVideoAmp.Get(VideoProcAmpProperty.Brightness, out value, out vpaFlags);
.....
// Get IAMCameraControl Values
IAMCameraControl pCameraControl = (IAMCameraControl)capFilter;
CameraControlFlags ccFlags;
pCameraControl.Get(CameraControlProperty.Exposure, out value, out ccFlags);
.....
但是,这两个接口都不允许获取这两个值。我将附上一个屏幕截图,显示在网络摄像头设置的典型windows界面中可访问的值:
如何通过DirectShow.Net访问这些值?这些属性页分别使用
IAMVideoProcAmp
和IAMCameraControl
接口与筛选器对象通信。也就是说,和是属性页实现调用的方法,它们同样可以由应用程序以编程方式使用
属性枚举没有为电源线频率和低光补偿定义值,因为SDK和文档不再更新以指示扩展枚举中的值,但新属性确实存在。具体来说,它们存在于stock属性页实现中
命名和记录的特性值可从较低层SDK定义中获得:
KSPROPERTY\u VIDEOPROCAMP\u POWERLINE\u频率
KSPROPERTY\u CAMERACONTROL\u AUTO\u EXPOSURE\u PRIORITY
IAMCameraControl::Set(曝光,…,自动)
@romar。谢谢,13的值确实有效,但是对于自动/手动标志,我不明白你的意思。自动/手动曝光标志是曝光的标志。我尝试并确认,当我设置/取消设置它时,它会在“属性”窗口中更改。所以这不是低光补偿的值。顺便说一句,你怎么知道电力线频率是13?我在哪里可以读到它?哦,是的,它可能给我19个“自动曝光”,对应于低光补偿,而不是值为4的原始曝光属性。我在Windows10SDK的底层查看了这些数字。它们没有针对DirectShow API进行文档记录,显然也没有通过DirectShow.NET为您转发。另一种查找它们的方法是挂接iamdevideoprocamp
和IAMCameraControl
接口,并检查属性页读取和写入这些值的具体操作。@RomanR。谢谢,我自己做了实验,发现19个是低光补偿,是的。草率的18和9也意味着什么,因为它们似乎也是一些未记录的值。您可以使用的MagnumDB找到其他值: