WEB开发网
开发学院软件开发VC 用DirectShow抓取影片帧 阅读

用DirectShow抓取影片帧

 2006-07-23 11:32:37 来源:WEB开发网   
核心提示: 头文件:dshow.h, qedit.h库文件:strmiids.lib因为使用CComPtr模板来声明接口实例,所以还要在工程中包含atlbase.h头文件,用DirectShow抓取影片帧(2),下面我们将一步步利用IMediaDet接口实现抓取影片帧的功能,第一步:新建一个基于对话框

头文件:dshow.h, qedit.h

库文件:strmiids.lib

因为使用CComPtr模板来声明接口实例,所以还要在工程中包含atlbase.h头文件。

下面我们将一步步利用IMediaDet接口实现抓取影片帧的功能。

第一步:新建一个基于对话框的应用程序,为应用程序添加两个编辑控件和三个按钮控件,程序界面如图所示:

第二步:为对话框类添加一个HRESULT类型的成员函数GrabFramFromMovie,它将实现抓帧功能。在函数体内创建IMediaDet接口实例,创建实例需要调用CoCreateInstance函数,并给函数的第一个参数传入CLSID_MediaDet类标识符。

第三步:调用IMediaDet::put_Filename方法为接口指定一个媒体文件,该方法只有一个参数,这个参数描述了媒体文件的路径,注意参数类型为BSTR。

第四步:调用IMediaDet::get_OutputStreams方法以得到影片输出流的数目,一个影片的输出由多个流组成,但是get_OutputStreams方法只关心影片输出的视频流和音频流而自动忽略其它流,所以,如果一个影片输出包含有视频流、音频流和数据流,get_OutputStreams只返回视频流和音频流的数目。

第五步:调用IMediaDet::put_CurrentStream方法指定一个用于编辑和操作的流,因为我们的目的是要将影片的单个帧保存为图片,这就需要对视频流进行操作,所以要利用put_CurrentStream定位影片文件输出的视频流。

第六步:调用IMediaDet::get_StreamMediaType方法得到一个VIDEOINFORHEADER结构,这个结构与当前指定的视频流关联。VIDEOINFORHEADER结构中包含有一个BITMAPINFORHEADER结构类型的成员,它描述了视频影像对应位图的尺寸、颜色等有用的信息。

Tags:DirectShow 抓取 影片

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接