Android imageview показывает зеленоватое изображение

Это исходное изображение:

введите здесь описание изображения

Это визуализированное изображение с использованием ImageView:

введите здесь описание изображения

Однако иногда, когда изображение находится в карусели, смахивание назад к изображению может привести к правильному отображению изображения, что еще более странно...

Такое поведение наблюдается как на LG G3 (Android 5.1), так и на Genymotion (Android 4.4.4). Я использую библиотеку Glide для загрузки изображений, используя формат декодирования ARGB_8888:

new GlideBuilder(this).setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);

person dementrock    schedule 30.06.2015    source источник
comment
Давайте рассмотрим проблему с GitHub: github.com/bumptech/glide/issues/515   -  person Sam Judd    schedule 01.07.2015


Ответы (2)


Это решенная проблема 305. Вот краткий обзор:

Эта проблема возникает только с изображениями в формате JPEG (качество не имеет значения). Похоже, что это влияет на RGB_565 гораздо сильнее, чем на ARGB_8888, поэтому вы можете переключить DecodeFormat на ARGB_8888 (очистите данные приложения, чтобы проверить, решена ли проблема). Но он может появиться даже с ARGB_8888, поэтому воспользуйтесь одним из следующих решений:

  1. Используйте DiskCacheStrategy.NONE (для локальных изображений) или DiskCacheStrategy.SOURCE (для удаленных изображений), чтобы предотвратить повторное сжатие изображений в Glide:

    Glide.with(this)
        .load(url)
        .diskCacheStrategy(DiskCacheStrategy.SOURCE)
        .into(imageView);
    
  2. Используйте asBitmap() и пользовательский BitmapEncoder, чтобы всегда сжимать затронутые изображения как PNG:

    Glide.with(this)
        .fromResource()
        .asBitmap()
        .encoder(new BitmapEncoder(Bitmap.CompressFormat.PNG,100))
        .load(R.drawable.testimg)
        .into(imageView);
    
person neits    schedule 24.08.2015
comment
Спасибо, здесь ключевое значение имеет diskCacheStrategy(DiskCacheStrategy.SOURCE). Все варианты DecodeFormat.PREFER_ARGB_8888/GlideBuilder/GlideModule бесполезны при фактическом принудительном использовании 24-битного цвета. - person Ryan; 11.11.2015

На всякий случай, если кто-то попробовал все перечисленное выше, и ничего из этого не сработало (как в моем случае), есть еще один обходной путь. Так как при трансформации возникает зеленоватый цвет, мы можем избежать трансформации.

Glide.with(context)
     .load(url)
     .dontTransform()
     .into(holder.productImage);
person RexSplode    schedule 26.01.2017