我正在开发一款允许单步执行视频帧(位图)的应用。它还可以一个接一个地播放帧,就像你实际上正在观看由帧组成的视频一样。
我有一个ImageView一次显示一个位图。我遇到的问题是将图像绘制到ImageView(我们只是调用super.onDraw())大约需要30ms。由于帧需要以其原始帧速率播放,因此这是一个问题。还有其他一些操作正在进行,这也会减慢过程,但绘图肯定没有帮助。
我正在研究OpenGL ES,但似乎并非所有设备都支持非二次幂图像,因此无法正常工作。图像的尺寸是设备记录的视频分辨率的一半,因为我以半尺寸对它们进行采样,而且几乎可以保证它不会是二次幂图像。
有什么方法可以加快速度,以便绘图更快?
答案 0 :(得分:3)
OpenGL ES 2.0强制支持两种纹理的非强大功能,因此您可以放心使用它。如果你使用的是OpenGL ES 1.0并且没有两个支持的强大功能,那么就可以很容易地解决它(只需创建一个足够大的两个纹理来包含你的npot图像。)
注意:您应该分析您的应用,看看您是否可以使用Canvas提高速度。也许你在绘制时缩小图像,也许它不是兼容的配置,转换发生在运行时(例如565到8888)等。
答案 1 :(得分:0)
我发现ImageView从来没有给我我想要的帧率(原因,我不知道)。对于类似的内容,您应该覆盖SurfaceView。这是一个更多的工作,但你肯定会看到帧速率的改善,你会有更多的灵活性。显然你会想知道你的剪辑,并且知道如果任何其他视图覆盖了这个视图,那么也会导致显着的减速(因为覆盖也需要在每个帧上重绘)。