Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1087314
  • 博文数量: 282
  • 博客积分: 10865
  • 博客等级: 上将
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-12 12:35
文章存档

2017年(1)

2016年(3)

2015年(10)

2014年(12)

2013年(5)

2012年(10)

2011年(29)

2010年(3)

2008年(13)

2007年(92)

2006年(104)

我的朋友

分类:

2007-09-20 22:43:45

播放速度的设定

需要使用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;

即可。

 

阅读(1074) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~