TVideoGrabber教程:捕捉帧

原创|使用教程|编辑:郝浩|2013-09-06 14:32:15.000|阅读 712 次

概述:在TVideoGrabber中,当启用了视频捕捉器时,可以在预览、录制以及回放中捕捉视频帧。这个视频捕捉器可以插入到预览流、捕捉流或是两者之间。

# 31款JAVA开发必备控件和工具 # 开发软/控件产品年终优惠

相关链接:

TVideoGrabber中,当启用了视频捕捉器时,可以在预览、录制以及回放中捕捉视频帧。这个视频捕捉器可以插入到预览流、捕捉流或是两者之间。同时这个帧可以捕捉到内存位图、BMP文件、JPEG文件、剪贴板(CF_BITMAP)。

一、直接复制来自OnFrameBitmap事件的当前视频帧的BITMAP HANDLE

对于每个经过视图的视频帧,会发生OnFrameBitmap事件,并允许直接捕捉位视图字节。

这个方法需要更少的CPU,然而由于这个OnFrameBitmap事件是直接从一个线程调用,这个位图handle以及位图字节只是在事件发生的时候有效,所以你必须复制它们到另一个缓冲区。

这种方法的问题就在于它可能会减缓成像并造成一个不平稳的预览,由于你添加到事件中的处理时间是包含在帧间隔中的,所以如果处理2帧的时间比帧率更长,这个帧就会被丢弃。

所以,建议通过调用StartPreview进行视图预览时,如果在这种情况下,如果在录制(这个可能会产生一个不平稳的录制)或是在回放期间(也可能会不平稳),丢弃帧也不是那么重要。

二、直接捕捉当前帧(或是之前帧)

调用GetLastFrameAsHBitmap (所有版本)或 GetLastFrameAsTBitmap (仅Delphi / C + + 生成器版本),根据你选择的尺寸以及是否覆盖来捕捉当前帧(或是之前帧)帧。这种方法并不会减慢成像,同时也不会出现丢帧的现象。

三、当前帧捕捉(或是在连拍模式下自动捕捉接下来的帧)

通过使用CaptureFrameTo(或启用突发模式)以及OnFrameCaptureCompleted的事件。这种方法也不会减慢成像,同时也不会出现丢帧的现象。

有或没有覆盖:

如果应用程序执行的图形或文字重叠,默认情况下,帧捕获就会覆盖。

启用FrameCaptureWithoutOverlay的属性,捕捉帧时就不会有覆盖。

1、异步与同步帧捕获

A、异步帧捕获

调用CaptureFrameTo一帧接一帧的捕捉,这个函数就会发送“捕捉秩序”并立即退出。然后这个捕捉帧就会通过OnFrameCaptureCompleted事件返回。

突发模式自动捕捉帧

突发模式允许自动捕获帧,模式可以通过启用BurstMode属性激活。

根据BurstType属性,可捕捉帧到TBitmap、 BMP文件或是JPEG 文件。

如果BurstCount = 0,可以无限制的捕捉帧,否则当帧的一个BurstCount数被捕捉到,帧捕捉就会停止。

如果BurstInterval > 0,帧的一个BurstInterval数就会在每个帧捕捉之间跳过。

通过启用BurstMode,就会激活突发模式。

突发模式无效的方法:

——禁用BurstMode

——如果BurstCount > 0,帧的一个BurstCount数就被捕捉到了。

当捕捉视频帧到BMP和JPEG文件:

——当调用CaptureFrameTo或CaptureFrameSyncTo时,如果没有文件名被调用,这个文件名就会自动生成(1)

——在突发模式中,文件名总是自动的生成(1)

(1)根据StoragePath,AutoFileName和AutoFilePrefix。

当执行帧叠加时,捕捉未修改的帧

通过使用帧叠加功能,当通过视频帧绘制时,在默认的情况下,在帧已经重叠之后这个帧捕捉就会发生。

在叠加之前,启用FrameCaptureWithoutOverlay的属性来捕捉为修改的帧。

异步帧捕获的例子

在打开剪辑之前,需要在这里设置UseClock = false,达到最大的播放速度。

VideoGrabber.BurstMode = true 
VideoGrabber.BurstCount = 5
VideoGrabber.BurstInterval = 10
VideoGrabber.BurstType = fc_BmpFile
VideoGrabber.PlayerFileName = "... the file name of my video clip..."
VideoGrabber.UseClock = false
VideoGrabber.OpenPlayer

捕获的帧的大小

默认值

——默认情况下,捕获的帧的大小是当前视频帧的尺寸,也就是VideoWidth 和 VideoHeight 属性返回的尺寸。

尺寸缩放

——通过指定一个FrameCaptureZoomSize的百分比实现捕捉帧的大小的缩放。默认的值是100 (100%)。

自定义大小

——通过对FrameCaptureWidth和 FrameCaptureHeight指定值,可以拉伸帧的尺寸搭配到指定的宽度、 高度。对于这两个属性默认的值是-1,也就是禁用。

B、同步帧捕获

该函数在返回之前将会等待的帧捕捉完成。

调用CaptureFrameSyncTo,这个函数将会等待帧捕捉,并通过OnFrameCaptureCompleted返回帧,成功后通过这个函数返回true,酷似上述的异步CaptureFrameTo。

如何捕获矩形视频帧

在调用CaptureFrameTo或CaptureFrameSyncTo之前调用SetFrameCaptureBounds(左,上,右,下) ,来实现一个矩形捕捉。

如何伸展捕获视频帧

指定FrameCaptureWidth或FrameCaptureHeight的值,随意的调整视频帧。

如何缩放捕获的视频帧

指定FrameCaptureZoomSize的缩放比例,调整捕获帧的尺寸。

上下以及左右帧捕捉

调用SetFrameCaptureBounds以及制定底部替代顶部,或是左侧替代右侧就可以实现这种方式的捕捉。

>>>TVideoGrabber 下载


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至hey@evget.com

文章转载自:慧都控件

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
在线咨询
联系我们
TOP
在线客服系统
live chat