Как использовать скольжение для загрузки изображения в bitmap?

Скачивание URL-адреса в ImageView очень просто с помощью Glide:

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

Мне интересно, могу ли я загрузить в Bitmap ? Я хотел бы загрузить в исходное bitmap, которое затем смогу манипулировать с помощью других инструментов. Я прошел через код и не вижу, как это сделать.

    Я недостаточно знаком с Glide, но похоже, если вы знаете размер цели, вы можете использовать что-то вроде этого:

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

    Похоже, вы можете передать -1,-1 и получить полноразмерное изображение (чисто основанное на тестах, не может быть документировано).

    Примечание into(int,int) возвращает FutureTarget , поэтому вам нужно обернуть это в блок try-catch, охватывающий ExecutionException и InterruptedException . Вот более полный пример реализации, тестирования и работы:

     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://sofru.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(); } } 

    Следуя предложению Monkeyless в комментарии ниже (и это, похоже, является официальным способом ), вы можете использовать SimpleTarget , необязательно связанный с override(int,int) чтобы значительно упростить код. Однако в этом случае должен быть указан точный размер (все, что ниже 1, не принимается):

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

    как было предложено @hennry, если вам требуется одинаковое изображение, используйте new SimpleTarget()

    Ну, с последней версией Glide compile 'com.github.bumptech.glide:glide:4.0.0' и выше, вам не нужно предоставлять размер или что-то еще, это довольно просто сейчас, как

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

    А для версий compile 'com.github.bumptech.glide:glide:3.7.0' и старше

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

    Похоже, что переопределение classа Target или одна из реализаций, таких как BitmapImageViewTarget и переопределение метода setResource для захвата растрового изображения может быть способом …

    Это не проверено. 🙂

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

    Это то, что сработало для меня: 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 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()); } }); } }); 

    Ответ @ outlyer верен, но есть некоторые изменения в новой версии Glide

    Моя версия: 4.7.1

    Код:

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

    Примечание: этот код запускается в streamе пользовательского интерфейса, поэтому вы можете использовать AsyncTask, Executor или что-то еще для параллелизма (например, код @ outlyer). Если вы хотите получить оригинальный размер, поместите Target.SIZE_ORIGINA в качестве моего кода. Не используйте -1, -1

    Если вы хотите назначить динамическое bitmap для битмап-переменных

    Пример для kotlin

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

    Вышеуказанные ответы мне не помогли

    .asBitmap должен быть до .load("http://....")

    Давайте будем гением компьютера.