background image

c++ DShow 中实现抓图的几种方法

c++ DShow 中实现抓图的几种方法
         
         
                       
 1.加入 Sample Grabber Filter

    当 我 们 加 入 Sample   Grabber   Filter 的 时 候 , 我 们 可 以 直 接 调 用 其 接 口
(interface)ISampleGrabber。该接口可以获取经过该 Filter 的单独的 Media Samples。详情请
参见 DXSDK。

  1.1 派生出自己的 Sample Grabber

  从 ISampleGrabberCB 中派生出自己的类,然后实现其虚函数,详情请参见 SDK 中的
示例程序(DXSDK ROOT\Samples\C++\DirectShow\Editing\GrabBitmaps)。

  1.2 直接调用 Sample Grabber Filter 的接口

  如果我们在播放的过程中动态的加入 Filter 的话,操作和效率都不乐观。所以我采用
下面的方法:

  该方法传递的是时间,不是在播放的时候动态加入 Filter 然后截图,而是另外打开源
文件进行操作。

  A)申明以下接口:

#001 IGraphBuilder *pGraph = NULL; //for graph builder

#002 IMediaControl *pControl = NULL; //media control

#003 IMediaSeeking *pSeeking = NULL; //media seeking

#004 IMediaEventEx *pEvent = NULL; //media envent

#005 IBaseFilter *pNullFilter =NULL;//for holding the Sample grabber Filter

  B)初始化接口:

#001 JIF(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, 

#002 IID_IGraphBuilder, (void **)&pGraph)); 

#003