我如何确定/计算位图的字节大小(使用BitmapFactory解码后)?我需要知道它占用了多少内存空间,因为我正在我的应用程序中进行内存缓存/管理。(文件大小不足,因为它们是jpg / png文件)
感谢您的任何解决方案!
更新:getRowBytes * getHeight可能会解决问题。.我将以这种方式实施,直到有人提出反对。
Answers:
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();
}
}
getAllocationByteCount()
。见developer.android.com/reference/android/graphics/...
最好只使用支持库:
int bitmapByteCount=BitmapCompat.getAllocationByteCount(bitmap)
但是,如果您有一个Android项目使用的minSdk至少为19(kitkat,表示4.4),则可以使用bitmap.getAllocationByteCount()。
width*height*bytesPerPixel
,其中bytesPerPixel通常为4或2。这意味着,如果您有1000x1000图像,则可能需要大约4 * 1000 * 1000 = 4,000,000字节,约4MB。
file.length
:developer.android.com/reference/java/io/File.html#length()。它与位图无关。位图分辨率可能很大,也可能很小。您所谈论的是文件本身。
这是利用KitKat的2014版本,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()
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及更高版本。