[英]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.