【问题标题】:How to optimize Canvas drawing - drawBitmap on Android?如何在 Android 上优化 Canvas 绘图 - drawBitmap?
【发布时间】:2010-12-01 22:08:56
【问题描述】:

我已经完成了我的分析,似乎我的大部分时间都花在了 drawBitmap 上,它在每一帧上都被(理解地)调用。

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

  • 在第一帧构造位图缓冲区并在其上绘制
  • 重复使用该位图绘制每个后续帧(不是我屏幕上的所有内容都发生变化)
  • 在每一帧结束时,将缓冲区绘制一次到目标 Canvas(到屏幕上)

Traceview 向我展示了这个 drawBitmap 在我的 800x480 设备上的每一帧需要 5 毫秒。我能得到比这更好的吗,或者它只是“刻在石头上”的东西,我只需要优化代码的其他部分以达到每秒好的帧数?

【问题讨论】:

  • 你能跟踪每一帧的脏矩形并只更新它吗?显然,如果你在左上角和右下角稍微改变一下,这对你没有多大帮助。

标签: android canvas


【解决方案1】:

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

【讨论】:

【解决方案2】:

有一场争夺最快绘图库的竞赛...libgdx 目前正在获胜...示例应用程序也像您一样使用 800x480。

http://code.google.com/p/libgdx/wiki/SimpleApp#Project_Setup

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2012-06-22
    • 2012-05-05
    • 2021-04-02
    • 2011-11-18
    相关资源
    最近更新 更多