Bitmap taille-octet après le décodage?

Comment puis-je déterminer / calculer la taille en octets d’un bitmap (après décodage avec BitmapFactory)? J’ai besoin de savoir combien d’espace de mémoire il occupe, car je fais de la mémoire cache / gestion dans mon application. (la taille du fichier ne suffit pas, car ce sont des fichiers jpg / png)

Merci pour toutes les solutions!

Mise à jour: getRowBytes * getHeight pourrait bien faire l’affaire.

getRowBytes() * getHeight() semble fonctionner getRowBytes() * getHeight() pour moi.

Mise à jour de la réponse à mon ~ 2 ans: Depuis Bitmap API niveau 12 a un moyen direct d’interroger la taille en octets: http://developer.android.com/reference/android/graphics/Bitmap.html#getByteCount%28%29

—- Exemple de code

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

Il est préférable d’utiliser la bibliothèque de support:

 int bitmapByteCount=BitmapCompat.getAllocationByteCount(bitmap) 

Voici la version 2014 qui utilise getAllocationByteCount() de KitKat et est écrite pour que le compilateur comprenne la logique de la version (donc, @TargetApi n’est pas nécessaire)

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

Notez que le résultat de getAllocationByteCount() peut être supérieur au résultat de getByteCount() si un bitmap est réutilisé pour décoder d’autres bitmaps de taille inférieure ou par reconfiguration manuelle.

 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 

La seule différence avec @ user289463 answer, est l'utilisation de getAllocationByteCount() pour les versions KitKat et supérieures.