WEB开发网
开发学院软件开发Delphi DirectShow之接口实战篇(三) 阅读

DirectShow之接口实战篇(三)

 2006-02-04 13:39:10 来源:WEB开发网   
核心提示:DirectShow之接口实战篇(三)播放速度的设定需要使用ImediaPosition的方法,MediaPosition.put_Rate(1);//正常MediaPosition.put_Rate(0.25);//慢速MediaPosition.put_Rate(2);//快速 单帧播放控制需要使用IvideoFr
DirectShow之接口实战篇(三) 播放速度的设定 需要使用ImediaPosition的方法。 MediaPosition.put_Rate(1);//正常 MediaPosition.put_Rate(0.25);//慢速 MediaPosition.put_Rate(2);//快速   单帧播放控制 需要使用IvideoFrameStep的方法 VideoFrameStep.Step(1, nil);   音量控制 需要使用IbasicAudio的方法 增加音量:
BasicAudio.get_Volume (&volume);//得到音量
volume:= volume +volumestep;
BasicAudio.put_Volume (volume);//增加一定的音量的分贝
减小音量:
BasicAudio.get_Volume (&volume); //得到音量
volume:= volume -volumestep;
BasicAudio.putVolume (volume); //减小一定音量的分贝   显示放大缩小控制 只需改变Edit1的大小,然后使用IvideoWindow接口方法即可 VideoWindow.SetWindowPosition(0, 0, Edit1.Width, Edit1.Height);   单帧捕获,抓图 其实很多接口都提供了此功能,但是我更倾向于使用IsampleGrabber接口来实现,相对来说,效率高些。 这个控制起来做的工作稍微多些,首先,在打开文件的时候 var  MediaType: TAM_MEDIA_TYPE; ZeroMemory(@MediaType, SizeOf(TAM_MEDIA_TYPE));    MediaType.majortype := MEDIATYPE_Video;//视频流    MediaType.subtype := MEDIASUBTYPE_RGB24;//24位图象    MediaType.formattype := FORMAT_VideoInfo;    SampleGrabber.SetMediaType(MediaType);//关联接口 SampleGrabber.SetBufferSamples(True); 然后在抓图按钮事件中如下操作 var   MediaType: TAM_MEDIA_TYPE;   VideoInfoHeader: TVideoInfoHeader;   BitmapInfo: TBitmapInfo;   Bitmap: HBitmap;   Buffer: Pointer;   BufferSize: Integer; begin   SampleGrabber.GetConnectedMediaType(MediaType);     ZeroMemory(@VideoInfoHeader, SizeOf(TVideoInfoHeader));   CopyMemory(@VideoInfoHeader, MediaType.pbFormat, SizeOf(VideoInfoHeader));     ZeroMemory(@BitmapInfo, SizeOf(TBitmapInfo));   CopyMemory(@BitmapInfo, @VideoInfoHeader.bmiHeader, SizeOf(VideoInfoHeader.bmiHeader));     Bitmap:=CreateDIBSection(0, BitmapInfo, DIB_RGB_COLORS, Buffer, 0, 0);   SampleGrabber.GetCurrentBuffer(BufferSize, Buffer);     Image1.Picture.Bitmap.Handle:=Bitmap end; 即可。

Tags:DirectShow 接口 实战

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