Bitmap taille en octets après le décodage?
Comment puis-je déterminer/calculer la taille en octets d'une image bitmap (après décodage avec BitmapFactory)?
J'ai besoin de savoir combien d'espace mémoire qu'elle occupe, parce que je suis en train de faire de la mémoire cache et de la gestion de mon application. (la taille du fichier n'est pas suffisant, car ce sont des jpg/png)
Merci pour toutes les solutions!
Mise à jour: getRowBytes * getHeight pourrait faire l'affaire.. je vais la mettre en œuvre cette manière jusqu'à ce que quelqu'un arrive avec quelque chose contre elle.
Vous devez vous connecter pour publier un commentaire.
getRowBytes() * getHeight()
semble bien fonctionner pour moi.Mise à jour de mon ~2 ans réponse:
Depuis l'API de niveau 12 image a une façon directe à la requête de la taille en octets:
http://developer.android.com/reference/android/graphics/Bitmap.html#getByteCount%28%29
----Exemple de code
getAllocationByteCount()
. Voir developer.android.com/reference/android/graphics/...Il est donc préférable d'utiliser la bibliothèque de prise en charge:
Mais si vous avez le projet Android pour utiliser au moins minSdk de 19 (kitkat, sens 4.4), vous pouvez simplement utiliser bitmap.getAllocationByteCount() .
width*height*bytesPerPixel
, où bytesPerPixel est généralement de 4 ou 2. Cela signifie que si vous avez un 1000x1000 de l'image, il peut prendre 4*1000*1000= 4 000 000 d'octets, sens ~4 MO.file.length
: developer.android.com/reference/java/io/File.html#length() . Il n'a rien à voir avec l'image bitmap. La résolution de l'image bitmap peut être énorme ou petit. De quoi vous parlez c'est le fichier lui-même.Ici est la 2014 version qui utilise KitKat est
getAllocationByteCount()
et est écrit de telle sorte que le compilateur comprend la version logique (donc@TargetApi
n'est pas nécessaire)À noter que le résultat de
getAllocationByteCount()
peut être plus grand que le résultat degetByteCount()
si une image bitmap est réutilisé pour décoder d'autres images de plus petite taille, ou par reconfiguration manuelle.La seule différence avec @user289463 réponse, est l'utilisation de
getAllocationByteCount()
pour KitKat et versions supérieures.