位图解码后的字节大小?
如何确定/计算位图的字节大小(用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和以上的版本。