急求取得动态视频文件的第一帧的例子???(100分)

  • 主题发起人 kuangwenwei
  • 开始时间
K

kuangwenwei

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在想取得动态视频文件的第一帧,有人说有directx,在网上也找了很多资料就是不成功,请有截取过动态视频文件第一帧的同志们给点建议!
 
明天我给你测试一下吧,给你个完整的例子,晕了,这么长时间还没搞掂呢
 
DSPACK中有这样的一个例子,但用到了第三方控件(一直没有分离出来),我想不用第三方控件,只用一个函数就可以达到这个效果
 
avi的好弄,如果你要通用格式的话,简单就只有用控件
通用的难度不小,还是用控件吧,呵呵
下个DIRECTSHOW,看看下边的东西自己试下,最近我太忙了,这个还得下200多兆的东西,网速慢
单帧捕获,抓图
其实很多接口都提供了此功能,但是我更倾向于使用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;
 
to madeagle:
是不是要加入DSPACK控件?
SampleGrabber通不过,但我加入了DSPACK中SampleGrabber这个控件又说没有SetMediaType这个.
谢谢!
 
顶部