位图解码后的字节大小?

如何确定/计算位图的字节大小(用BitmapFactory解码之后)? 我需要知道它占用了多less内存空间,因为我在应用程序中进行内存caching/pipe理。 (文件大小不够,因为这些是JPG / PNG文件)

感谢任何解决scheme!

更新:getRowBytes * getHeight可能会做的伎俩..我会这样实现,直到有人提出反对它。

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(); } } 

最好只使用支持库:

 int bitmapByteCount=BitmapCompat.getAllocationByteCount(bitmap) 

这里是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()的结果可能会大于getAllocationByteCount()的结果,如果重新使用位图来解码其他尺寸较小的位图或手动重新configuration。

 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和以上的版本。