Delphi XE5 Firemonkey视频帧抓取和显示

时间:2014-08-04 02:48:21

标签: delphi windows-8.1 video-capture firemonkey delphi-xe5

其他地方有一个Stackoverflow线程指出Firemonkey必须通过主线程显示视频。我正在尝试使用DirectX摄像头捕获一系列图像(现在在Win8.1中 - 其他操作系统可以等待)。所以我在Embarcadero示例代码中使用SampleBufferReady和SampleBufferSync方法(在表单上只有一个TImage),但是如果有足够的更改,我什么都看不到。我需要在TImageViewer中进行显示;将tbitmap指向该tbitmap的SampleBufferSync很容易。但没有任何表现。从程序的角度来看,我想要的伪代码是

setup whatever
camera.startcapture 
repeat
 repeat until framecaptured {what SampleBufferReady should do -- only fire when ready}
 Imageviewer.repaint {inside SampleBufferReady?}
 inc(mycounter) {inside SampleBufferReady?}
until (mycounter>mylimit) or (user interrupts video input)
camera

可以添加一个ttimer来减慢速度。我不知道"得到什么"是

  • 我必须定义自己的TEvent才能发现相机已经拍摄了一张图片,或者这个图片是否已经存在?我原本以为SampleBufferReady会响应图像的到来,我可以处理该事件内的任何内容。
  • 要在TImage以外的其他地方显示图像,是否需要关闭相机,绘制位图,然后重新打开相机?如果是这样,我是否需要让SampleBufferReady包含关闭相机的命令?男孩,听起来很笨重!

建议?

1 个答案:

答案 0 :(得分:0)

这是一个完整的代码源,我在函数调用和机制方面测试与pascal相同的c ++版本,只有语法不同: download here the pascal version

代码适用于android和桌面(我测试c ++版本)。所以下载,测试并确认pascal代码。