配置视频质量

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

本主题介绍应用程序如何以编程方式更改视频捕获设备上的图像和相机设置。

ProcAmp 设置

Windows 驱动程序模型 (WDM) 摄像机可以支持控制图像质量的属性:

  • 背光补偿
  • 亮度
  • 与此示例
  • 获得
  • Gamma
  • 色调
  • 饱和度
  • Sharpness
  • 白平衡

这些属性通过 IAMVideoProcAmp 接口进行控制。 按如下所示使用此接口:

  1. IAMVideoProcAmp 接口的捕获筛选器上调用 QueryInterface
  2. 对于要设置的每个属性,调用 IAMVideoProcAmp::GetRange 方法。 属性由 VideoProcAmpProperty 枚举指定。 如果 GetRange 方法失败,则表示相机不支持该特定属性。
  3. 如果 GetRange 成功,它将返回属性支持的值范围、默认值和最小增量。
  4. 若要获取属性的当前值,请调用 IAMVideoProcAmp::Get
  5. 若要设置属性,请调用 IAMVideoProcAmp::Set 方法。 若要将属性还原到其默认值,请调用 GetRange 以查找默认值,并将该值传递给 Set 方法。

设置属性时,无需停止筛选器图。

以下代码配置跟踪条控件,以便可用于设置亮度。 跟踪条的范围对应于设备支持的亮度范围,跟踪条的位置对应于设备的初始亮度设置。

HWND hTrackbar; // Handle to the trackbar control. 
// Initialize hTrackbar (not shown).

// Query the capture filter for the IAMVideoProcAmp interface.
IAMVideoProcAmp *pProcAmp = 0;
hr = pCap->QueryInterface(IID_IAMVideoProcAmp, (void**)&pProcAmp);
if (FAILED(hr))
{
    // The device does not support IAMVideoProcAmp, so disable the control.
    EnableWindow(hTrackbar, FALSE);
}
else
{
    long Min, Max, Step, Default, Flags, Val;

    // Get the range and default value. 
    hr = m_pProcAmp->GetRange(VideoProcAmp_Brightness, &Min, &Max, &Step,
        &Default, &Flags);
    if (SUCCEEDED(hr))
    {
        // Get the current value.
        hr = m_pProcAmp->Get(VideoProcAmp_Brightness, &Val, &Flags);
    }
    if (SUCCEEDED(hr))
    {
        // Set the trackbar range and position.
        SendMessage(hTrackbar, TBM_SETRANGE, TRUE, MAKELONG(Min, Max));
        SendMessage(hTrackbar, TBM_SETPOS, TRUE, Val);
        EnableWindow(hTrackbar, TRUE);
    }
    else
    {
        // This property is not supported, so disable the control.
        EnableWindow(hTrackbar, FALSE);
    }
}

摄像机设置

IAMCameraControl 接口类似于 IAMVideoProcAmp,但控制相机本身的各种设置:

  • 曝光
  • 焦点
  • Iris
  • 平移
  • Roll
  • Tilt
  • 缩放

若要使用此接口,请按照 IAMVideoProcAmp 所用的相同步骤操作:

  1. 查询 IAMCameraControl 的捕获筛选器。
  2. 调用 IAMCameraControl::GetRange 以查找支持哪些设置以及每个设置的可能范围。
  3. 调用 IAMCameraControl::Get 以获取设置的当前值。
  4. 调用 IAMCameraControl::Set 以设置值。

配置视频捕获设备