3

我是初学者 directshow 程序员我正在尝试制作包含来自某些网络摄像头(实时提要)的 WPF 应用程序

然后我可以从这个“实时提要”中拍一张照片

我定义了一个 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 窗口中

注意:建立图表后,摄像头 LED 指示摄像头正在捕捉。

提前致谢

4

2 回答 2

4

基本上,您需要在视频设备过滤器之后添加一个 SampleGrabber 过滤器以获取视频帧并将视频“渲染”到空渲染器过滤器。

SampleGrabber 将更新包含当前帧的缓冲区。此缓冲区用于创建InteropBitmap图像并将图像带入 WPF 世界。ImageBrush然后您可以从中创建一个InteropBitmap,并将其用作Background任何一个UIElement

请参阅以下项目:http ://wpfcap.codeplex.com/ ,它完全符合我的简要描述。

于 2011-12-11T16:04:42.803 回答