2014-01-12 93 views
0
sampGrabber = new SampleGrabber() as ISampleGrabber; 
capGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2(); 

hr = m_FilterGraph.AddSourceFilterForMoniker(dev.Mon, null, dev.Name, out capFilter); 
DsError.ThrowExceptionForHR(hr); 

// Hopefully this will be the video pin 
IPin iPinOutSource = DsFindPin.ByDirection(capFilter, PinDirection.Output, 0); 

IBaseFilter baseGrabFlt = sampGrabber as IBaseFilter; 
ConfigureSampleGrabber(sampGrabber); 

iPinInFilter = DsFindPin.ByDirection(baseGrabFlt, PinDirection.Input, 0); 
iPinOutFilter = DsFindPin.ByDirection(baseGrabFlt, PinDirection.Output, 0); 

// Add the frame grabber to the graph 
hr = m_FilterGraph.AddFilter(baseGrabFlt, "Ds.NET Grabber"); 
DsError.ThrowExceptionForHR(hr); 

hr = m_FilterGraph.Connect(iPinOutSource, iPinInFilter); 
DsError.ThrowExceptionForHR(hr); 

// Get the default video renderer 
ibfRenderer = (IBaseFilter) new VideoRendererDefault(); 

// Add it to the graph 
hr = m_FilterGraph.AddFilter(ibfRenderer, "Ds.NET VideoRendererDefault"); 
DsError.ThrowExceptionForHR(hr); 
iPinInDest = DsFindPin.ByDirection(ibfRenderer, PinDirection.Input, 0); 

// Connect the graph. Many other filters automatically get added here 
hr = m_FilterGraph.Connect(iPinOutFilter, iPinInDest); 
DsError.ThrowExceptionForHR(hr); 

SaveSizeInfo(sampGrabber); 

// Set the output window 
IVideoWindow videoWindow = m_FilterGraph as IVideoWindow; 
hr = videoWindow.put_Owner(hWin.Handle); 
DsError.ThrowExceptionForHR(hr); 

hr = videoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipChildren | WindowStyle.ClipSiblings); 
DsError.ThrowExceptionForHR(hr); 

hr = videoWindow.put_Visible(OABool.True); 
DsError.ThrowExceptionForHR(hr); 

Rectangle rc = hWin.ClientRectangle; 
hr = videoWindow.SetWindowPosition(0, 0, rc.Right, rc.Bottom); 
DsError.ThrowExceptionForHR(hr); 

我从我的摄像头捕捉。我把一些文本放到捕获的视频中,最后我想把它保存到一个文件中。我怎样才能做到这一点? 我的项目建立在DxText示例上。 如果我使用samplegrabber,我不能使用capturegraph,反之亦然。谁能帮我?如何将samplegrabber文件保存到avi?

回答

0

如果您想使用SampleGrabber抓取帧并写入avi文件,您需要编解码器和库来编写avi文件。您可能必须自己搜索库或sdk。

但是,我会建议不要使用SampleGrabber,而是使用Tee过滤器。对于三通的第二个输出连接一个编码器和avi文件编写器。

+0

谢谢, 你的意思是我从我的摄像头捕捉视频,然后把一些文本,然后,我用编码器和AVI文件作家? 我对不对? –

+0

我不明白你想在上面放一些文字。但是,是的,这也是可能的,那么你必须保留SampleGrabber并将Tee放在后面。另请参阅DXLogo示例。 – wimh