Maher Abuthraa
Maher Abuthraa

Reputation: 17813

Is there a way to load image as bitmap to Glide

Im looking for a way to use bitmap as input to Glide. I am even not sure if its possible. It's for resizing purposes. Glide has a good image enhancement with scale. The problem is that I have resources as bitmap already loaded to memory. The only solution I could find is to store images to temporary file and reload them back to Glide as inputStream/file.. Is there a better way to achieve that ?

Please before answering .. Im not talking about output from Glide.. .asBitmap().get() I know that.I need help with input.

Here is my workaround solution:

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

I'd like to avoid writing images to internal and load them again.That is the reason why Im asking if there is way to to have input as bitmap

Thanks

Upvotes: 47

Views: 97473

Answers (13)

Saurabh Dhage
Saurabh Dhage

Reputation: 1711

This Single liner might help you

  val bitmap=Glide.with(this).asBitmap().load(imageUri).submit().get()

Upvotes: 2

ucMax
ucMax

Reputation: 5428

Updated answer 2022 Aug

Glide.with(context)
      .asBitmap()
      .load(uri) // Uri, String, File...
      .into(new CustomTarget<Bitmap>() {
          @Override
          public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
              useIt(resource);
          }

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

onResourceReady : The method that will be called when the resource load has finished.
resource parameter is the loaded resource.

onLoadCleared : A mandatory lifecycle callback that is called when a load is cancelled and its resources are freed. You must ensure that any current Drawable received in onResourceReady is no longer used before redrawing the container (usually a View) or changing its visibility.
placeholder parameter is the placeholder drawable to optionally show, or null.

Upvotes: 2

Rajeev Jayaswal
Rajeev Jayaswal

Reputation: 1501

This worked for me in recent version of Glide:

Glide.with(this)
        .load(bitmap)
        .dontTransform()
        .into(imageView);

Upvotes: 3

Arslan Maqbool
Arslan Maqbool

Reputation: 529

Please use Implementation for that is:

implementation 'com.github.bumptech.glide:glide:4.9.0'

     Glide.with(this)
     .asBitmap()
      .load("http://url")
    .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) { 
 } 
});

Upvotes: 7

Mayuri Khinvasara
Mayuri Khinvasara

Reputation: 1517

Most of the API's and methods of Glide are now deprecated. Below is working for Glide 4.9 and upto Android 10.

For image URI

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

Use Glide as below in build.gradle

implementation 'com.github.bumptech.glide:glide:4.9.0'

Upvotes: 6

Kishan Solanki
Kishan Solanki

Reputation: 14618

In 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)

Upvotes: 1

Ashu Kumar
Ashu Kumar

Reputation: 832

There is little changes according to latest version of Glide. Now we need to use submit() to load image as bitmap, if you do not class submit() than listener won't be called.

here is working example i used today.

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

It is working and I'm getting bitmap from listener.

Upvotes: 13

Tom Sabel
Tom Sabel

Reputation: 4025

This solution is working with Glide V4. You can get the bitmap like this:

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

Note: this will block the current thread to load the image.

Upvotes: 26

Yurii Tsap
Yurii Tsap

Reputation: 3744

A really strange case, but lets try to solve it. I'm using the old and not cool Picasso, but one day I'll give Glide a try. Here are some links that could help you :

And actually a cruel but I think efficient way to solve this :

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);

I'm not sure if this will help you, but I hope it can make you a step closer to the solution.

Upvotes: 19

Theo
Theo

Reputation: 2042

For what is is worth, based upon the posts above, my approach:

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

then in the adapter:

        //  loading album cover using Glide library

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

Upvotes: 2

Safeer
Safeer

Reputation: 1467

The accepted answer works for previous versions, but in new versions of Glide use:

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

Courtesy

Upvotes: 5

Teffi
Teffi

Reputation: 2508

For version 4 you have to call asBitmap() before load()

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

More info: http://bumptech.github.io/glide/doc/targets.html

Upvotes: 79

Ankush Bist
Ankush Bist

Reputation: 1892

here's another solution which return you a bitmap to set into your 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);
                }
            });

Upvotes: 4

Related Questions