DirectShow设置亮度、对比度等属性

来源:互联网 发布:更改windows用户名 编辑:程序博客网 时间:2024/05/05 22:18

在DirectShow,对很多设置可以通过   IAMVideoProcAmp接口设置亮度、对比度等属性 

下面m_pVideo是源设备Filter,

   IAMVideoProcAmp *pProcAmp = 0;
   hr = m_pVideo->QueryInterface(IID_IAMVideoProcAmp, (void**)&pProcAmp);
   if(SUCCEEDED(hr))
   {
    long Min, Max, Step, Default, Flags, Val;

    // 亮度.
    if( g_Brightness > 0 )
    {
     hr = pProcAmp->GetRange(VideoProcAmp_Brightness, &Min, &Max, &Step,
      &Default, &Flags);
     if(SUCCEEDED(hr))
     {
      hr = pProcAmp->Get(VideoProcAmp_Brightness, &Val, &Flags);
      Val = Min+(Max-Min)*g_Brightness/100;
      pProcAmp->Set(VideoProcAmp_Brightness, Val, Flags);
     }
    }

   //对比度
    if( g_Contrast > 0 )
    {
     hr = pProcAmp->GetRange(VideoProcAmp_Contrast, &Min, &Max, &Step,
      &Default, &Flags);
     if(SUCCEEDED(hr))
     {
      hr = pProcAmp->Get(VideoProcAmp_Contrast, &Val, &Flags);
      Val = Min+(Max-Min)*g_Contrast/100;
      pProcAmp->Set(VideoProcAmp_Contrast, Val, Flags);
     }
    }

   //饱和度
    if( g_Saturation > 0 )
    {
     hr = pProcAmp->GetRange(VideoProcAmp_Saturation, &Min, &Max, &Step,
      &Default, &Flags);
     if(SUCCEEDED(hr))
     {
      hr = pProcAmp->Get(VideoProcAmp_Saturation, &Val, &Flags);
      Val = Min+(Max-Min)*g_Saturation/100;
      pProcAmp->Set(VideoProcAmp_Saturation, Val, Flags);
     }
    }
   }