74 votes

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.

123voto

user289463 Points 1315

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

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

21voto

for3st Points 2727

Voici la 2014 version qui utilise KitKat de l' getAllocationByteCount() , et il est écrit de sorte que le compilateur comprend la version logique (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();
    }
}

À noter que le résultat de l' getAllocationByteCount() peut être plus grand que le résultat de l' getByteCount() si une image bitmap est réutilisé pour décoder d'autres images de plus petite taille, ou par reconfiguration manuelle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X