你正在做的正确!
一个快速了解值是否有效的方法是将其记录如下:
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中使用的文件
/**
* 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();
参考文献: