2010-12-01 66 views
5

我已经完成了我的分析,看起来大部分时间都是在drawBitmap期间花费的,它在每一帧都被调用(理解)。如何在Android上优化Canvas绘图 - drawBitmap?

我使用SurfaceView /更新线程/画布锁定方法,如LunarLander示例中所演示的。但我已经(根据this question)改变了它作为

  • 的第一帧上构建一个位图缓存和油漆到它
  • 油漆每个后续帧重复使用位图(在我的屏幕变化不是一切)
  • 在每个帧的结尾涂料缓冲器一旦进入目标画布(到屏幕)

Traceview我表明这个drawBitmap花费5毫秒为我的800x480设备上的每个帧。我能得到比这更好的东西,还是仅仅是'雕刻成石头'的东西,我只需要优化代码的其他部分,以达到每秒良好的帧数呢?

+0

你可以跟踪每个帧的脏矩形,只更新?显然,如果你在左上角和右下角稍微改变一点,那对你来说无能为力。 – EboMike 2010-12-01 22:14:08

+0

OpenGL可能会是您更好的选择。我在手机和平​​板电脑上运行了很多测试,drawBitmap()速度太慢,主要是在平板电脑上。但是,这里有一些选项适用于您:http://www.independent-software.com/android-speeding-up-canvas-drawbitmap/ – 2016-09-02 08:54:26

回答

10

这取决于很多事情,但通常drawBitmap()会尽可能快地得到。在你的特殊情况下,如果你不需要混合,请确保你使用的是不透明的位图。另外,尝试使用与您的Surface兼容的格式的位图。例如,如果您使用的是16位Surface,则绘制16位(RGB565)位图的速度会非常快(这只是一个memcpy调用)。如果Surface是32位,则使用ARGB8888不透明位图。

+3

您如何建议检测Surface的格式?传递给surfaceChanged的“格式”值似乎始终为“-1”。 – 2010-12-11 23:17:18