¿Cómo se usa deslizarse para descargar una imagen en un bitmap?

Descargar una URL en un ImageView es muy fácil usando Glide:

  Glide .with(context) .load(getIntent().getData()) .placeholder(R.drawable.ic_loading) .centerCrop() .into(imageView); 

Me pregunto si puedo descargar también en un Bitmap . Me gustaría descargar en un bitmap sin formato que luego puedo manipular con otras herramientas. He pasado por el código y no veo cómo hacerlo.

    No estoy lo suficientemente familiarizado con Glide, pero parece que si conoces el tamaño objective, puedes usar algo como esto:

     Bitmap theBitmap = Glide. with(this). load("http://...."). asBitmap(). into(100, 100). // Width and height get(); 

    Parece que puede pasar -1,-1 y obtener una imagen de tamaño completo (basada puramente en pruebas, no puede verlo documentado).

    La nota into(int,int) FutureTarget un FutureTarget , por lo que debe envolverlo en un bloque try-catch que cubra ExecutionException e InterruptedException . Aquí hay un ejemplo más completo de implementación, probado y funcionando:

     class SomeActivity extends Activity { private Bitmap theBitmap = null; @Override protected void onCreate(Bundle savedInstanceState) { // onCreate stuff ... final ImageView image = (ImageView) findViewById(R.id.imageView); new AsyncTask() { @Override protected Void doInBackground(Void... params) { Looper.prepare(); try { theBitmap = Glide. with(SomeActivity.this). load("http://sofes.miximages.com/android/logo11w.png"). asBitmap(). into(-1,-1). get(); } catch (final ExecutionException e) { Log.e(TAG, e.getMessage()); } catch (final InterruptedException e) { Log.e(TAG, e.getMessage()); } return null; } @Override protected void onPostExecute(Void dummy) { if (null != theBitmap) { // The full bitmap should be available here image.setImageBitmap(theBitmap); Log.d(TAG, "Image loaded"); }; } }.execute(); } } 

    Siguiendo la sugerencia de Monkeyless en el comentario a continuación (y esta parece ser la forma oficial también ), puede usar un SimpleTarget , opcionalmente junto con la override(int,int) para simplificar considerablemente el código. Sin embargo, en este caso se debe proporcionar el tamaño exacto (no se acepta nada por debajo de 1):

     Glide .with(getApplicationContext()) .load("http://sofes.miximages.com/android/logo11w.png") .asBitmap() .into(new SimpleTarget(100,100) { @Override public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { image.setImageBitmap(resource); // Possibly runOnUiThread() } }); 

    según lo sugerido por @hennry si requirió la misma imagen, entonces use el new SimpleTarget()

    Bueno, con la última versión de Glide compile 'com.github.bumptech.glide:glide:4.0.0' y superior, no tienes que proporcionar tamaño ni nada, es bastante simple ahora como

     Glide.with(this) .asBitmap() .load(path) .into(new SimpleTarget() { @Override public void onResourceReady(Bitmap resource, Transition< ? super Bitmap> transition) { imageView.setImageBitmap(resource); } }); 

    Y para las versiones, compile 'com.github.bumptech.glide:glide:3.7.0' y compile 'com.github.bumptech.glide:glide:3.7.0' anteriores

     Glide.with(this) .load(path) .asBitmap() .into(new SimpleTarget() { @Override public void onResourceReady(Bitmap resource, GlideAnimation< ? super Bitmap> glideAnimation) { imageView.setImageBitmap(resource); } }); 

    Parece que se anula la clase Target o una de las implementaciones como BitmapImageViewTarget y se reemplaza el método setResource para capturar el bitmap, que podría ser el camino a seguir …

    Esto no ha sido probado. 🙂

      Glide.with(context) .load("http://goo.gl/h8qOq7") .asBitmap() .into(new BitmapImageViewTarget(imageView) { @Override protected void setResource(Bitmap resource) { // Do bitmap magic here super.setResource(resource); } }); 

    Esto es lo que funcionó para mí: https://github.com/bumptech/glide/wiki/Custom-targets#overriding-default-behavior

     import com.bumptech.glide.Glide; import com.bumptech.glide.request.transition.Transition; import com.bumptech.glide.request.target.BitmapImageViewTarget; ... Glide.with(yourFragment) .load("yourUrl") .asBitmap() .into(new BitmapImageViewTarget(yourImageView) { @Override public void onResourceReady(Bitmap bitmap, Transition< ? super Bitmap> anim) { super.onResourceReady(bitmap, anim); Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { // Here's your generated palette Palette.Swatch swatch = palette.getDarkVibrantSwatch(); int color = palette.getDarkVibrantColor(swatch.getTitleTextColor()); } }); } }); 

    La respuesta de @ outlyer es correcta, pero hay algunos cambios en la nueva versión de Glide

    Mi versión: 4.7.1

    Código:

      Glide.with(context.applicationContext) .asBitmap() .load(iconUrl) .into(object : SimpleTarget(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) { override fun onResourceReady(resource: Bitmap, transition: com.bumptech.glide.request.transition.Transition?) { callback.onReady(createMarkerIcon(resource, iconId)) } }) 

    Nota: este código se ejecuta en UI Thread, por lo tanto puede usar AsyncTask, Executor o algo más para concurrencia (como el código de @ outlyer) Si desea obtener el tamaño original, ponga Target.SIZE_ORIGINA como mi código. No use -1, -1

    Si desea asignar una imagen de bitmap dynamic a variables de bitmap

    Ejemplo de kotlin

     backgroundImage = Glide.with(applicationContext).asBitmap().load(PresignedUrl().getUrl(items!![position].img)).into(100, 100).get(); 

    Las respuestas anteriores no funcionaron para mí

    .asBitmap debe estar antes de .load("http://....")