我正在使用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