我是一名初学者directshow程序员我正在尝试制作包含某些网络摄像头的(实时Feed)的WPF应用程序
然后我可以从这个“实时Feed”中拍下一张照片
我定义了一个GraphBuilder,我做了如下:
static void BuildGraph(IGraphBuilder pGraph)
{
//graph builder
int hr = 0;
ICaptureGraphBuilder2 pBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
hr = pBuilder.SetFiltergraph(pGraph);
Guid clsid_VidCapSource = new Guid("{860BB310-5D01-11D0-BD3B-00A0C911CE86}");
//add myCam
IBaseFilter mycam = CreateFillterByName("QuickCam Communicate Deluxe", clsid_VidCapSource);
hr = pGraph.AddFilter(mycam, "QuickCam Communicate Deluxe");
//add color space converter
IBaseFilter pColorSpaceConverter3 = (IBaseFilter)new Colour();
hr = pGraph.AddFilter(pColorSpaceConverter3, "Color Space Converter");
//connect myCam, pColorSpaceConverter
hr = pGraph.ConnectDirect(GetPin(mycam, "Capture"), GetPin(pColorSpaceConverter3, "Input"), null);
}
之后我构建了一个图表:
private void Button_Click(object sender, RoutedEventArgs e)
{
IGraphBuilder graph = (IGraphBuilder)new FilterGraph();
BuildGraph(graph);
IMediaControl mediaControl = (IMediaControl)graph;
mediaControl.Run();
}
如何将此图表的输出呈现到我的WPF窗口
注意:构建图形后,摄像头指示摄像头正在捕获。
提前致谢
答案 0 :(得分:3)
基本上,您需要在视频设备过滤器之后添加SampleGrabber过滤器以获取视频帧并将视频“渲染”为空渲染器过滤器。
SampleGrabber将更新包含当前帧的缓冲区。此缓冲区用于创建InteropBitmap
并将图像带入WPF世界。然后,您可以从ImageBrush
创建InteropBitmap
,并将其用作任何Background
的{{1}}。
请参阅以下项目:http://wpfcap.codeplex.com/,这正是我所描述的内容。
答案 1 :(得分:1)