web-dev-qa-db-fra.com

Comment obtenir un bitmap à partir d'un ImageView

Je souhaite obtenir une Bitmap d'une ImageView chargée avec Glide comme ceci:

Glide.with(getContext()).load(URL)
            .thumbnail(0.5f)
            .crossFade()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(my_imageView);

J'ai essayé ce qui suit:

imageView.buildDrawingCache();
Bitmap bmap = imageView.getDrawingCache();

et

BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();

Et aucun d'entre eux n'a fonctionné pour moi jusqu'à présent.

Comment cela peut il etre accompli?

6
user5448913

Oh, c'est une simple erreur. Vous devez ajouter ceci avant le code où vous essayez d'extraire Bitmap de ImageView:

imageView.setDrawingCacheEnabled(true);

Pour extraire la Bitmap de ImageView à l'aide de DrawingCache, vous devez d'abord enable ImageView pour dessiner le cache d'images.

puis:

Bitmap bmap = imageView.getDrawingCache();

De plus, appeler buildDrawingCache(); équivaut à appeler buildDrawingCache(false);.

6
Nilesh Singh

J'ai eu le problème que le bitmap aboutissait toujours à null (même en utilisant le cache de dessin, probablement une course avec Facebook ShareButton/ShareContent), donc j'avais la solution suivante pour m'assurer que le glissement était terminé en chargeant l'image:

Ajouter un auditeur à glisser

Glide.with(this)
        .load(url)
        .listener(listener)
        .into(imageView);

L'auditeur

private RequestListener listener = new RequestListener() {
    ...

    @Override
    public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {

        Bitmap bitmap = ((BitmapDrawable) resource).getBitmap();
        return false;
    }
};
0
spydon

setDrawingCacheEnabled a été - obsolète , une autre solution utilise donc 

ImageView imageView = findViewById(R.id.image);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();

Ou pour obtenir Bitmap à partir de Uri, nous pouvons utiliser la bibliothèque Glide

Bitmap bitmap = Glide.with(this) //taking as bitmap
                     .load(uri //Uri)
                     .asBitmap()
                     .into(100, 100) //width and height
                     .get();

Utiliser Glide est très utile pour manipuler bitmaps. Reportez-vous à la documentation à Gestion des images bitmap

0
aQwus jargon