你做对了!
确定这些值是否有效的一种快速方法是像这样记录它:
int numBytesByRow = bitmap.getRowBytes() * bitmap.getHeight();
int numBytesByCount = bitmap.getByteCount();
Log.v( TAG, "numBytesByRow=" + numBytesByRow );
Log.v( TAG, "numBytesByCount=" + numBytesByCount );
这给出了结果:
03-29 17:31:10.493: V/ImageCache(19704): numBytesByRow=270000
03-29 17:31:10.493: V/ImageCache(19704): numBytesByCount=270000
所以两者都在计算相同的数字,我怀疑这是位图的内存大小。 这与磁盘上的JPG或PNG不同,因为它是完全未压缩的。
有关更多信息,我们可以查看 AOSP 和示例项目中的源代码。这是Android 开发者文档Caching Bitmaps 中示例项目BitmapFun中使用的文件
AOSP ImageCache.java
/**
* Get the size in bytes of a bitmap in a BitmapDrawable.
* @param value
* @return size in bytes
*/
@TargetApi(12)
public static int getBitmapSize(BitmapDrawable value) {
Bitmap bitmap = value.getBitmap();
if (APIUtil.hasHoneycombMR1()) {
return bitmap.getByteCount();
}
// Pre HC-MR1
return bitmap.getRowBytes() * bitmap.getHeight();
}
如您所见,这是他们使用的相同技术
bitmap.getRowBytes() * bitmap.getHeight();
参考: