1

我正在开发一个允许单步播放视频帧(位图)的应用程序。它还可以一个接一个地播放帧,就好像您实际上正在观看由这些帧组成的视频一样。

我有一个 ImageView 一次显示一个位图。我遇到的问题是将图像绘制到 ImageView(我们只是在调用 super.onDraw())大约需要 30 毫秒。由于帧需要以原始帧速率播放,这是一个问题。还有其他一些操作也在进行,这些操作也减慢了这个过程,但绘图肯定没有帮助。

我正在研究 OpenGL ES,但似乎并非所有设备都支持非二次幂图像,所以这不起作用。图像的尺寸是设备记录的视频分辨率的一半,因为我以一半大小对它们进行采样,并且几乎可以保证永远不会是二次方图像。

有什么方法可以加快速度,以便绘图更快?

4

2 回答 2

3

OpenGL ES 2.0 强制支持两个纹理的非幂,因此您可以放心使用它。如果您使用 OpenGL ES 1.0 并且没有二次幂支持,则很容易解决它(只需创建足够大的二次幂纹理以包含您的 npot 图像。)

注意:您应该分析您的应用程序以查看是否可以使用 Canvas 提高速度。也许您在绘制时缩小图像,也许它不在兼容的配置中并且在运行时发生转换(例如 565 到 8888)等。

于 2011-06-29T16:45:04.317 回答
0

我发现 ImageView 从来没有给我我正在寻找的帧速率(原因,我不知道)。对于这样的事情,您应该改写SurfaceView。这需要更多的工作,但您肯定会看到帧速率有所提高,并且您将拥有更大的灵活性。显然,您需要了解您的剪辑,并知道如果任何其他视图覆盖此剪辑,也会导致显着减速(因为覆盖也需要在每一帧上重新绘制)。

于 2011-06-29T16:51:57.240 回答