解码后的位图字节大小?

时间:2010-03-09 08:30:42

标签: android bitmap

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

感谢任何解决方案!

更新:getRowBytes * getHeight可能会这样做..我会以这种方式实现它,直到有人提出反对它。

4 个答案:

答案 0 :(得分:113)

getRowBytes() * getHeight()似乎对我很好。

更新我~2岁的答案: 由于API级别12 Bitmap有直接查询字节大小的方法: 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();
        }
    }

答案 1 :(得分:41)

最好只使用支持库:

int bitmapByteCount=BitmapCompat.getAllocationByteCount(bitmap)

但如果您的Android项目至少使用minSdk为19(kitkat,意思是4.4),则可以使用bitmap.getAllocationByteCount()

答案 2 :(得分:21)

以下是使用KitKat getAllocationByteCount()的2014版本,编写后编译器了解版本逻辑(因此不需要@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()的结果,如果重复使用位图来解码较小尺寸的其他位图,或者通过手动重新配置。

答案 3 :(得分:5)

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