Я не понимаю, почему Bitmap создается с Bitmap.createBitmap()
больше (больше кбайт в собственной куче), чем декодированный Bitmap с BitmapFactory.decodeResource()
.
Я работаю с LG Optimus One (dpi160, Android 2.2) и я измеряю выделенную память с помощью Debug.getNativeHeapAllocatedSize()
.
Если я создал растровое изображение (200x200) таким образом:
Bitmap createdBitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888);
Затем размер собственной кучи увеличилсяк. 160kB .
Но если я расшифровал изображение PNG (200x200) из ресурса (из папки drawable-mdpi
):
Bitmap mdpiBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image_mdpi);
Размер увеличился на c. только 3 КБ .
Но если я декодирую PNG-изображение (150x150) с drawable-ldpi
, то Android масштабирует изображение до 200x200, и размер собственной кучи также увеличивается на c. 160kB .
Кто-нибудь знает, почему создается растровое изображение и декодируется (масштабируется) такое большое изображение?
Спасибо за ответ.
Вот код, который я использовал для измерения:
long createdSizeStart = Debug.getNativeHeapAllocatedSize();
Bitmap createdBitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888);
long createdSize = Debug.getNativeHeapAllocatedSize() - createdSizeStart;
long resourceMdpiSizeStart = Debug.getNativeHeapAllocatedSize();
Bitmap resourceMdpiBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image_mdpi);
long resourceMdpiSize = Debug.getNativeHeapAllocatedSize() - resourceMdpiSizeStart;
long resourceLdpiSizeStart = Debug.getNativeHeapAllocatedSize();
Bitmap resourceLdpiBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image_ldpi);
long resourceLdpiSize = Debug.getNativeHeapAllocatedSize() - resourceLdpiSizeStart;
Log.i("test", "Created: " + createdSize + " B, " + createdBitmap.getWidth() + "x" + createdBitmap.getHeight());
Log.i("test", "Resource MDPI: " + resourceMdpiSize + " B, " + resourceMdpiBitmap.getWidth() + "x" + resourceMdpiBitmap.getHeight());
Log.i("test", "Resource LDPI: " + resourceLdpiSize + " B, " + resourceLdpiBitmap.getWidth() + "x" + resourceLdpiBitmap.getHeight());
Выход:
Создано: 163952 B, 200x200
Ресурс MDPI: 3184 B, 200x200
Ресурс LDPI: 164424 B, 200x200