2015-06-30 3 views
6

Это исходное изображение:Android ImageView показывает зеленовато изображение

enter image description here

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

enter image description here

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

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

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

Давайте проследим на вопрос GitHub: https://github.com/bumptech/glide/issues/515 –

ответ

7

Это решен вопрос 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); 
    
+0

Спасибо, diskCacheStrategy (DiskCacheStrategy.SOURCE) является ключевым фактором здесь. Все варианты DecodeFormat.PREFER_ARGB_8888/GlideBuilder/GlideModule бесполезны, фактически вызывая 24-битный цвет. – Ryan

+0

Не работает для меня. Изображения по-прежнему зеленые – RexSplode

1

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

Glide.with(context) 
    .load(url) 
    .dontTransform() 
    .into(holder.productImage); 
1
This issue may happen on few devices not all like one plus 3 or 3T and some LG devices when fetching imageUrl from server to your android project. 

public static void loadImageWith(Context context, String imageUrl, ImageView imageView) { 
    Glide.with(context) 
      .load(imageUrl) 
      .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
      .dontTransform() 
      .placeholder(R.drawable.empty_photo) 
      .into(imageView); 
    } 

centerCrop() may create issue, so avoid to use centerCrop(). 
+0

хорошо узнать! –

Смежные вопросы