web-dev-qa-db-ja.com

デコード後のビットマップのバイトサイズ?

(BitmapFactoryでデコードした後)ビットマップのバイトサイズを決定/計算するにはどうすればよいですか?私はアプリでメモリのキャッシュ/管理を行っているため、どのくらいのメモリスペースが占有されているかを知る必要があります。 (これらはjpg/pngファイルであるため、ファイルサイズは十分ではありません)

解決策をありがとう!

更新:getRowBytes * getHeightでうまくいくかもしれません。誰かがそれに対して何かを思い付くまで、この方法で実装します。

62
user289463

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

サポートライブラリを使用することをお勧めします。

int bitmapByteCount=BitmapCompat.getAllocationByteCount(bitmap)

しかし、少なくとも19のminSdk(4.4を意味するKitKat)を使用するAndroidプロジェクトがある場合は、 bitmap.getAllocationByteCount() を使用できます。

43

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()の結果よりも大きいことに注意してください。 ビットマップを再利用して、サイズの小さい他のビットマップをデコードする場合、または手動で再構成する場合。

21
patrickf
_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の答えとの唯一の違いは、KitKat以上のバージョンでgetAllocationByteCount()を使用することです。

5
ahmed_khan_89