如何确定/计算位图的字节大小(使用BitmapFactory解码后)? 我需要知道它占用了多少内存空间,因为我正在我的应用程序中进行内存缓存/管理。 (文件大小不够,因为这些是jpg / png文件)
感谢任何解决方案!
更新:getRowBytes * getHeight可能会这样做..我会以这种方式实现它,直到有人提出反对它。
答案 0 :(得分:113)
getRowBytes() * getHeight()
似乎对我很好。
更新我~2岁的答案: 由于API级别12 Bitmap有直接查询字节大小的方法: 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();
}
}
答案 1 :(得分:41)
最好只使用支持库:
int bitmapByteCount=BitmapCompat.getAllocationByteCount(bitmap)
但如果您的Android项目至少使用minSdk为19(kitkat,意思是4.4),则可以使用bitmap.getAllocationByteCount()。
答案 2 :(得分:21)
以下是使用KitKat getAllocationByteCount()
的2014版本,编写后编译器了解版本逻辑(因此不需要@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()
的结果,如果重复使用位图来解码较小尺寸的其他位图,或者通过手动重新配置。
答案 3 :(得分:5)
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及以上版本。