簡體   English   中英

為 TileProvider 創建自定義 bitmap 圖像時節省 memory

[英]Save on memory when creating custom bitmap images for a TileProvider

使用自定義 TileProvider:

class ObjectTileProvider @Inject constructor(
   val application: Application,
   val repository: ObjectRepository
) : TileProvider {
   override fun getTile(x: Int, y: Int, z: Int): Tile {
      val objects = repository.getObjectsInTile(x, y, z)
      val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
      val canvas = Canvas(bitmap)

      objects.forEach { object ->
         val image = objectImage(object)
         canvas.drawBitmap(image, ...)
      }
   }
   
   private fun objectImage(): Bitmap {
      val bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888)
      val canvas = Canvas(bitmap)

      // Draw object on canvas

      return bitmap
   }
}

我想看看是否有更多 memory 有效的方法來在 objectImage function 中創建位圖,因為我將迭代許多對象來繪制圖塊。 當我的對象達到某個閾值時,我的應用程序會因 OutOfMemoryException 而崩潰。

我已經研究過使用 BitmapFactory 創建 Bitmap,但是看起來所有方法都指向一個文件或 stream。 我也許可以推出自己的 bitmap 池,但它必須是線程安全的,因為 TileProvider 不是線程安全的。 但是不確定這是我的問題所在。

在將 bitmap 發送到 canvas 之前,您是否嘗試過重新調整其大小?

// I'm picking a randomly small tile size, but you can adjust it as you need
val size = 36
val scaledBitmap = Bitmap.createScaledBitmap(origBitmap, size, size, true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM