Directshow:将图形结果显示在WPF窗口上

本文关键字:WPF 窗口 显示 结果 图形 Directshow | 更新日期: 2023-09-27 18:14:10

我是一个初学者directshow程序员,我正试图使WPF应用程序包含(实时feed)从某些网络摄像头

然后我就可以从这个"live 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窗口

注意:在构建图形后,摄像机指示灯指示摄像机正在捕获。

thanks in advance

Directshow:将图形结果显示在WPF窗口上

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

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

参见下面的项目:http://wpfcap.codeplex.com/,它做的正是我所简要描述的。

请务必查看之前关于该主题的问题:

  • WPF控制问题
  • 将多个实时视频流拉入WPF
  • 我如何使用WPF MediaKit,或类似的程序,从DirectShow过滤器图形上创建的DES到WPF控件的渲染?