2017-09-06 4 views
0

J'ai créer une application qui charge l'image de facebook. J'utilise Picasso. Picasso définira le résultat de l'image pour mon Imageview. Je veux convertir cette image en bitmap.Comment obtenir drawable à partir d'imageview et convertir en bitmap?

Voici mon code pour obtenir une image de Facebook:

URL imageURL = new URL("https://graph.facebook.com/"+id+"/picture?type=large");     
Picasso.with(getBaseContext()).load(imageURL.toString()).into(ImageView); 

Voici mon code pour obtenir l'image et les convertir en bitmap: (fonctionne pas)

BitmapDrawable drawable = (BitmapDrawable) ImageView.getDrawable(); 
Bitmap bitmap = drawable.getBitmap(); 
bitmap = Bitmap.createScaledBitmap(bitmap, 70, 70, true); 
ImageViewTest.setImageBitmap(bitmap); 

ImageView.getDrawable() retourne toujours NULL.

J'ai besoin de votre aide. Merci

+0

Pourquoi ne pas avoir Picasso juste vous donner le bitmap lorsque vous le récupérez? – CommonsWare

+0

mais j'ai vu son paramètre est imageview. votre idée est de convertir imageview en bitmap? –

+0

Il existe plusieurs options pour ce que Picasso peut faire. Voir [cette réponse] (https://stackoverflow.com/a/46082179/115145) et [cette réponse] (https://stackoverflow.com/a/46081082/115145). – CommonsWare

Répondre

1

Est-ce que le chargement de l'image dans l'image fonctionne? Ce qui se passe probablement, c'est que vous appelez ImageView.getDrawable() avant que Picasso ait fini de charger l'image. Quand appelez-vous le code getDrawable? Essayez de faire quelque chose comme:

Picasso.with(getBaseContext()).load(imageURL.toString()) 
    .into(ImageView, new com.squareup.picasso.Callback() { 
     @Override 
     public void onSuccess() { 
      BitmapDrawable drawable = (BitmapDrawable) ImageView.getDrawable(); 
      ... 
     } 

     @Override 
     public void onError() { 

     } 
}); 
0
// Your imageview declaration 
ImageView iv; 
// Enable cache of imageview in oncreate 
iv.setDrawingCacheEnabled(true); 
// Get bitmap from iv 
Bitmap bmap = iv.getDrawingCache(); 
0

Cela devrait être à l'intérieur d'un AsyncTask:

try { 
    URL url = new URL("http://...."); 
    Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
} catch(IOException e) { 
    System.out.println(e); 
} 
+0

Merci. Cela fonctionne mais nous devons utiliser AsyncTask. :) –

+0

veuillez accepter cette réponse afin que les autres puissent obtenir de l'aide –

0

Vous pouvez le faire par le code suivant

ImageView img; 
img.setDrawingCacheEnabled(true); 
Bitmap scaledBitmap = img.getDrawingCache(); 
1

Vous devez utiliser l'API Picasso pour accomplir ce que vous cherchez à faire.

Une option serait de fournir un auditeur Target pour effectuer la manipulation Bitmap avant de le mettre sur le ImageView comme ceci:

Picasso.with(getBaseContext()) 
     .load("https://graph.facebook.com/" + id + "/picture?type=large") 
     .into(new Target() { 
      @Override 
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
       // Manipulate image and apply to ImageView 
      } 

      @Override 
      public void onBitmapFailed(Drawable errorDrawable) { 

      } 

      @Override 
      public void onPrepareLoad(Drawable placeHolderDrawable) { 

      } 
     }); 

Ou mieux encore, utilisez Picasso pour perfom l'opération de modification de taille et ne faites pas Bitmap vous manipuler, comme ça:

Picasso.with(getBaseContext()) 
     .load("https://graph.facebook.com/" + id + "/picture?type=large") 
     .resize(70, 70) 
     .into(ImageView); 
+0

vous le savez peut-être! https://stackoverflow.com/q/46131941/294884 – Fattie