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; 即可。
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 接口 实战
编辑录入:爽爽 [复制链接] [打 印]- ››实战:企业使用交换机VLAN路由配置
- ››实战案例分析:高质量软文对网站百度排名的影响
- ››实战经验浅谈网站搬家后的优化工作
- ››实战Active Directory站点部署与管理,Active Dir...
- ››实战操作主机角色转移,Active Directory系列之十...
- ››实战经验:巧用微博推广淘宝网店
- ››实战iPhone GPS定位系统
- ››实战Linux环境配置DBD:Oracle模块
- ››实战DeviceIoControl系列之一:通过API访问设备驱...
- ››实战DeviceIoControl系列之二:获取软盘/硬盘/光盘...
- ››实战DeviceIoControl系列之三:制作磁盘镜像文件
- ››实战DeviceIoControl系列之四:获取硬盘的详细信息...
更多精彩
赞助商链接