读书人

用Directshow来开发摄像头程序如何设

发布时间: 2012-04-10 21:03:56 作者: rapoo

用Directshow来开发摄像头程序,怎么设置亮度,对比度等参数
摄像头已经可以用了,不过我想要在程序里加上亮度,对比等参数的设置,在网上找到的代码是这样的
C#代码是这样的
private void SetBrightness(IBaseFilter capFilter, int iBrightness)
{
IAMVideoProcAmp videoProcAmp = capFilter as IAMVideoProcAmp;
int Val;
DirectShowLib.VideoProcAmpFlags Flags = VideoProcAmpFlags.Auto;
videoProcAmp.Get(VideoProcAmpProperty.Brightness, out Val, out Flags);
if (m_brightness != 0)
{
videoProcAmp.Set(VideoProcAmpProperty.Brightness, m_brightness, Flags);
}
else
{
...
}
}

IAMVideoProcAmp videoProcAmp = capFilter as IAMVideoProcAmp;这一句我想改成vb.net 应该是
dim videoProcAmp as IAMVideoProcAmp 可是后面这一部分我就看不懂了,不知道要怎么办
这个接口要怎么写,请高手帮助,最好是有完整一点的代码,可是让我看清楚一点

[解决办法]
在DirectShow,对很多设置可以通过 IAMVideoProcAmp接口设置亮度、对比度等属性

下面m_pVideo是源设备Filter,

C# code
   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);     }    }   } 

读书人网 >VB Dotnet

热点推荐