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