使用来自摄像机视频的矩阵缓慢BitmapData.draw()

时间:2017-03-07 00:44:35

标签: actionscript-3 actionscript air

我正在使用AS3 / Flash构建器构建iOS AIR应用程序。

应用程序将摄像机流抓取到视频对象中,然后将其绘制到BitmapData。相机流是1280x720px,容器是2208x1242px(iPhone 7+)所以我需要缩放镜头。我还需要围绕中心点旋转它:

mat.identity();
mat.translate(-video.width/2,-video.height/2);
mat.rotate(Math.PI/2);
mat.translate(video.height/2,video.width/2);
mat.scale(deviceSize.height/cam.width,deviceSize.width/cam.height);

我用矩阵定时绘图操作:

videoBitmapData.draw(video,mat); //9-11ms

没有矩阵:

videoBitmapData.draw(video); //2-3ms

显然,这种转变正在减缓我的速度。 有更快的方法吗?也许首先绘制,然后以某种方式应用矩阵? 预先旋转的东西? 利用原生缩放/旋转? 我可以以某种方式跳过使用视频对象吗?以更原始的形式访问相机数据?

我认为使用渲染模式GPU与CPU没有区别。

谢谢!

修改

我设法通过这样做了大约一半:

1. Put the video object inside a Sprite
2. Transform the Sprite.
3. Draw the Sprite to the BitmapData.
(5-6ms)

令人惊讶的是,这比这更加一致:

1. Put the video object inside a Sprite 
2. Transform the video object inside the Sprite
3. Draw the sprite to the BitmapData
(5-12ms)

加成: 我只需要摄像机的部分像素(全宽x高度为100px)。当意识到我可以使用带有.draw命令的clipRect时,我设法达到了0-1ms。

感谢Organis

0 个答案:

没有答案