web-dev-qa-db-fra.com

Est-il possible de charger une image bitmap dans Glide?

Je cherche un moyen d'utiliser bitmap comme entrée de Glide. Je ne sais même pas si c'est possible. C'est à des fins de redimensionnement. Glide a une bonne amélioration de l'image avec l'échelle. Le problème est que j'ai des ressources en tant que bitmap déjà chargées en mémoire. La seule solution que je pourrais trouver est de stocker les images dans un fichier temporaire et de les recharger de nouveau dans Glide en tant que inputStream/file. Existe-t-il un meilleur moyen de réaliser cela?

S'il vous plaît avant de répondre .. Je ne parle pas de sortie de Glide .. .asBitmap().get() Je sais que.J'ai besoin d'aide avec entrée.

Voici ma solution de contournement:

 Bitmap bitmapNew=null;
        try {
            //
            ContextWrapper cw = new ContextWrapper(ctx);
            File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
            File file=new File(directory,"temp.jpg");
            FileOutputStream fos = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
            fos.close();
            //
            bitmapNew = Glide
                    .with(ctx)
                    .load(file)
                    .asBitmap()
                    .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .skipMemoryCache(true)
                    .into( mActualWidth, mActualHeight - heightText)
                    .get();

            file.delete();
        } catch (Exception e) {
            Logcat.e( "File not found: " + e.getMessage());
        }

J'aimerais éviter d'écrire des images en interne et de les charger à nouveau. C'est pourquoi je demande s'il est possible d'avoir une entrée en tant que bitmap

Merci

24
Maher Abuthraa

Pour la version 4, vous devez appeler asBitmap() avant load()

GlideApp.with(itemView.getContext())
        .asBitmap()
        .load(data.getImageUrl())
        .into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {}
            });
        }

Plus d'infos: http://bumptech.github.io/glide/doc/targets.html

52
Teffi

Un cas vraiment étrange, mais essayons de le résoudre. J'utilise l'ancien et pas cool Picasso, mais un jour je vais essayer Glide. Voici quelques liens qui pourraient vous aider:

Et en fait, un moyen cruel mais efficace de résoudre ce problème:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
  yourBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
  Glide.with(this)
      .load(stream.toByteArray())
      .asBitmap()
      .error(R.drawable.ic_thumb_placeholder)
      .transform(new CircleTransform(this))
      .into(imageview);

Je ne sais pas si cela vous aidera, mais j'espère que cela pourra vous rapprocher de la solution.

16
Yurii Tsap

Cette solution fonctionne avec Glide V4. Vous pouvez obtenir le bitmap comme ceci:

Bitmap bitmap = Glide
    .with(context)
    .asBitmap()
    .load(uri_File_String_Or_ResourceId)
    .submit()
    .get();

Remarque: ceci bloquera le fil actuel pour charger l'image.

13
Exaqt

Il y a peu de changements selon la dernière version de Glide. Nous devons maintenant utiliser submit() pour charger l'image en tant que bitmap. Si vous ne classez pas submit(), le programme d'écoute ne sera pas appelé.

voici l'exemple de travail que j'ai utilisé aujourd'hui.

Glide.with(cxt)
  .asBitmap().load(imageUrl)
  .listener(new RequestListener<Bitmap>() {
      @Override
      public boolean onLoadFailed(@Nullable GlideException e, Object o, Target<Bitmap> target, boolean b) {
          Toast.makeText(cxt,getResources().getString(R.string.unexpected_error_occurred_try_again),Toast.LENGTH_SHORT).show();
          return false;
      }

      @Override
      public boolean onResourceReady(Bitmap bitmap, Object o, Target<Bitmap> target, DataSource dataSource, boolean b) {
          zoomImage.setImage(ImageSource.bitmap(bitmap));
          return false;
      }
  }
).submit();

Cela fonctionne et j'obtiens un bitmap d'auditeur.

7
Ashu Kumar

La réponse acceptée fonctionne pour les versions précédentes, mais dans les nouvelles versions de Glide, utilisez:

RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(Android.R.drawable.waiting);
requestOptions.error(R.drawable.waiting);
Glide.with(getActivity()).apply(requestOptions).load(imageUrl).into(imageView);

Courtoisie

5
Safeer

voici une autre solution qui vous retourne un bitmap à définir dans votre ImageView

Glide.with(this)
            .load(R.drawable.card_front)    // you can pass url too
            .asBitmap()
            .into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    // you can do something with loaded bitmap here

                    imgView.setImageBitmap(resource);
                }
            });
3
Ankush Bist

À Kotlin,

Glide.with(this)
            .asBitmap()
            .load("https://...")
            .addListener(object : RequestListener<Bitmap> {
                override fun onLoadFailed(
                    e: GlideException?,
                    model: Any?,
                    target: Target<Bitmap>?,
                    isFirstResource: Boolean
                ): Boolean {
                    Toast.makeText(this@MainActivity, "failed: " + e?.printStackTrace(), Toast.LENGTH_SHORT).show()
                    return false
                }

                override fun onResourceReady(
                    resource: Bitmap?,
                    model: Any?,
                    target: Target<Bitmap>?,
                    dataSource: DataSource?,
                    isFirstResource: Boolean
                ): Boolean {
                    //image is ready, you can get bitmap here
                    return false
                }

            })
            .into(imageView)
1

Pour ce qui vaut la peine, sur la base des posts ci-dessus, mon approche:

     Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri imageUri = Uri.withAppendedPath(sArtworkUri, String.valueOf(album_id));

puis dans l'adaptateur:

        //  loading album cover using Glide library

    Glide.with(mContext)
            .asBitmap()
            .load(imageUri)
            .into(holder.thumbnail);
0
Theo

S'il vous plaît utiliser la mise en œuvre pour cela est:

implémentation 'com.github.bumptech.glide: glide: 4.9.0'

     Glide.with(this)
     .asBitmap()
      .load(item.getMarkertOverlayImage())
    .into(new CustomTarget <Bitmap>() {   
@Override  
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition <? super Bitmap> transition) { 
                // you can do something with loaded bitmap here

 }
@Override 
public void onLoadCleared(@Nullable Drawable placeholder) { 
 } 
});
0
Arslan Maqbool