用DirectShow构建ICaptureGraphBuilder图表后,可以正确的采集视频.但是,一般情况下,视频都是显示在一个系统自动弹出的对话框中,下面介绍了如何将采集的视频显示在任意窗口中.
这里以显示到一个CStatic(即一个Rectangle)上为例.(运用了IVideoWindow Interface)
在建好Video Capture Filter Graph后,我们只须调用IMediaControl::Run()即可开始视频预览.我们只须在Run前加入下列两个函数,即可实现在Static中预览视频的功能.
bool SetupVideoWindow()
{
HRESULT hr;
hr = pVW->put_Owner((OAHWND)(m_nVideoWindow.m_hWnd)); // m_nVideoWindow (CStatic Object)
if (FAILED(hr))
return false;
// Set video window style
hr = pVW->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN); // pVW (IVideoWindow Interface)
if (FAILED(hr))
return false;
hr = pVW->put_Visible(OATRUE);
if (FAILED(hr))
return false;
return true;
}
void ResizeVideoWindow()
{
if (pVW)
{
RECT rc;
// Make the preview video fill our window
m_nVideoWindow.GetClientRect(&rc);
pVW->SetWindowPosition(0, 0, rc.right, rc.bottom);
}
}