2010-12-01 72 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