2011-06-29 94 views
1

我正在研究一个允许跨越视频帧(位图)的应用程序。它也有能力逐帧播放这些帧,就好像您实际上在观看由这些帧组成的视频一样。画布绘制速度太慢

我有一个ImageView一次显示一个位图。我遇到的问题是将图像绘制到ImageView(我们正在谈论的只是对super.onDraw()的调用)需要大约30ms。由于帧需要以原始帧速率播放,这是一个问题。还有其他一些操作也正在进行,这些操作也会减慢过程,但绘图当然无济于事。

我正在研究OpenGL ES,但似乎并非所有设备都支持非功率为2的图像,所以这是行不通的。图像的尺寸是该设备录制的视频分辨率的一半,因为我以半尺寸对它们进行了采样,并且几乎保证不会成为二次幂的图像。

有什么办法可以加快速度,使绘图更快?

回答

3

OpenGL ES 2.0强制支持两种纹理的非功率,所以您可以安全使用它。如果你使用的是OpenGL ES 1.0,并且你没有两种支持的能力,那么解决它非常容易(只需要创建两个足够大的纹理来容纳你的npot图像。)

注意:你应该简介你的应用程序,看看你是否可以提高帆布的速度。也许你在缩小图像的时间,也许它不是在兼容的配置和转换发生在运行时(例如565至8888)等。

+0

只是想补充一点,您还可以使用NPOT纹理,通过扩展到下一个幂次,创建纹理,然后缩放以进行渲染。 –

+0

虽然两个功能的支持也不取决于设备的硬件吗?我在看http://stackoverflow.com/questions/3881197/opengl-es-2-0-extensions-on-android-devices,它看起来像列出的Tegra 2设备不支持npot扩展。 – BigFwoosh

+0

哎呀,我的意思是非二的权力。 – BigFwoosh

0

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