Размер битового массива после декодирования?
Как определить/вычислить размер байта растрового изображения (после декодирования с помощью BitmapFactory)?
Мне нужно знать, сколько места в памяти занимает он, потому что я делаю кэширование/управление памятью в своем приложении. (размер файла недостаточен, так как это файлы jpg/png)
Спасибо за любые решения!
Обновление: getRowBytes * getHeight может сделать трюк. Я реализую его таким образом, пока кто-то не придумает что-то против него.
Ответы
Ответ 1
getRowBytes() * getHeight()
, кажется, работает отлично для меня.
Обновите мой ответ на 2 года:
Поскольку битмап API уровня 12 имеет прямой способ запроса размера байта:
http://developer.android.com/reference/android/graphics/Bitmap.html#getByteCount%28%29
---- Пример кода
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
protected int sizeOf(Bitmap data) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
return data.getRowBytes() * data.getHeight();
} else {
return data.getByteCount();
}
}
Ответ 2
Лучше всего использовать библиотеку поддержки:
int bitmapByteCount=BitmapCompat.getAllocationByteCount(bitmap)
Ответ 3
Вот версия 2014, которая использует KitKat getAllocationByteCount()
и написана так, что компилятор понимает логику версии (поэтому @TargetApi
не требуется)
/**
* returns the bytesize of the give bitmap
*/
public static int byteSizeOf(Bitmap bitmap) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
return bitmap.getAllocationByteCount();
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
return bitmap.getByteCount();
} else {
return bitmap.getRowBytes() * bitmap.getHeight();
}
}
Обратите внимание, что результат getAllocationByteCount()
может быть больше результата getByteCount()
, если растровое изображение повторно используется для декодирования других растровых изображений меньшего размера или путем ручной реконфигурации.
Ответ 4
public static int sizeOf(Bitmap data) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
return data.getRowBytes() * data.getHeight();
} else if (Build.VERSION.SDK_INT<Build.VERSION_CODES.KITKAT){
return data.getByteCount();
} else{
return data.getAllocationByteCount();
}
}
Единственное отличие от ответа @user289463 - использование getAllocationByteCount()
для KitKat и выше версий.