Compartilhar via


Configurar a qualidade do vídeo

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Este tópico descreve como um aplicativo pode alterar programaticamente as configurações de imagem e câmera em um dispositivo de captura de vídeo.

Configurações do ProcAmp

As câmeras de vídeo WDM (Modelo de Driver do Windows) podem dar suporte a propriedades que controlam a qualidade da imagem:

  • Compensação de luz de fundo
  • Brightness
  • Contraste
  • Ganhar
  • Gama
  • Matiz
  • Saturação
  • Nitidez
  • Proporção de branco

Essas propriedades são controladas por meio da interface IAMVideoProcAmp . Use esta interface da seguinte maneira:

  1. Chame QueryInterface no filtro de captura para a interface IAMVideoProcAmp .
  2. Para cada propriedade que você deseja definir, chame o método IAMVideoProcAmp::GetRange . As propriedades são especificadas pela enumeração VideoProcAmpProperty . Se o método GetRange falhar, isso significa que a câmera não dá suporte a essa propriedade específica.
  3. Se GetRange for bem-sucedido, ele retornará o intervalo de valores com suporte para a propriedade, o valor padrão e o incremento mínimo.
  4. Para obter o valor atual de uma propriedade, chame IAMVideoProcAmp::Get.
  5. Para definir uma propriedade, chame o método IAMVideoProcAmp::Set . Para restaurar uma propriedade para seu valor padrão, chame GetRange para localizar o padrão e passar esse valor para o método Set .

Você não precisa parar o grafo de filtro ao definir as propriedades.

O código a seguir configura um controle trackbar para que ele possa ser usado para definir o brilho. O intervalo da barra de controle corresponde ao intervalo de brilho ao qual o dispositivo dá suporte e a posição da barra de controle corresponde à configuração de brilho inicial do dispositivo.

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);
    }
}

Camera Settings

A interface IAMCameraControl é semelhante a IAMVideoProcAmp, mas controla várias configurações na própria câmera:

  • Exposição
  • Foco
  • Iris
  • Panorâmica
  • Roll
  • Tilt
  • Zoom

Para usar essa interface, siga as mesmas etapas usadas para IAMVideoProcAmp:

  1. Consulte o filtro de captura para IAMCameraControl.
  2. Chame IAMCameraControl::GetRange para localizar quais configurações têm suporte e o intervalo possível para cada configuração.
  3. Chame IAMCameraControl::Get para obter o valor atual de uma configuração.
  4. Chame IAMCameraControl::Set para definir o valor.

Configurando um dispositivo de captura de vídeo