Delphi XE5 Firemonkey视频帧抓取和显示

Delphi XE5 Firemonkey视频帧抓取和显示,delphi,windows-8.1,video-capture,firemonkey,delphi-xe5,Delphi,Windows 8.1,Video Capture,Firemonkey,Delphi Xe5,其他地方有一个Stackoverflow线程指出Firemonkey必须通过主线程显示视频。我正在尝试使用DirectX摄像头在Win8.1中捕捉一系列图像,现在其他操作系统可以等待了。因此,我在Embarcadero示例代码中使用SampleBufferReady和SampleBufferSync方法,该方法在表单上只有一个TImage,但有足够的更改,我从未看到任何内容。我需要在TImageViewer中进行显示;将SampleBufferSync中的tbitmap指向该tbitmap很容易

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

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会对图像的到来做出响应,我可以处理事件中的任何内容。 要以图像以外的方式显示图像,我是否需要关闭相机,绘制位图,然后重新打开相机?如果是这样,我是否需要让SampleBufferReady包含关闭相机的命令?天哪,听起来很笨重吧!
<>建议>

这里是一个完整的代码源,我在函数调用和机制方面测试了与Pascal相同的C++版本,只是语法不同:

<代码>对于Android和桌面I都很好,测试C++版本。所以请下载、测试并确认pascal代码