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