2015-06-30 17 views
6

Dies ist das Originalbild:Android Imageview zeigt grünlich Bild

enter image description here

Dies wird das gerenderte Bild Image mit:

enter image description here

Aber manchmal, wenn das Bild in einem Karussell Wenn Sie zurück zum Bild wischen, kann dies dazu führen, dass das Bild korrekt gerendert wird, was noch seltsamer ist.

Dieses Verhalten wird sowohl bei einem LG G3 (Android 5.1) als auch bei Genymotion (Android 4.4.4) beobachtet. Ich verwende die Glide Bibliothek für das Laden von Bildern unter Verwendung des ARGB_8888 Dekodierungsformat:

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

Lassen Sie uns auf der GitHub Ausgabe folgen: https://github.com/bumptech/glide/issues/515 –

Antwort

7

Dies ist ein Problem gelöst 305. Hier eine kurze Zusammenfassung:

Dieses Problem tritt nur bei Bildern mit JPEG-Format auf (die Qualität ist irrelevant). Es sieht so aus, als ob es sich auf RGB_565 viel mehr als ARGB_8888 auswirkt, also sollten Sie das DecodeFormat auf ARGB_8888 umstellen (löschen Sie die App-Daten, um zu überprüfen, ob das Problem behoben ist). Aber kann es erscheinen auch bei ARGB_8888, so verwenden Sie eine der folgenden Lösungen:

  1. Verwenden DiskCacheStrategy.NONE (für lokale Bilder) oder DiskCacheStrategy.SOURCE (für Remote-Bilder) Glide zu verhindern, dass erneut Komprimieren der Bilder:

    Glide.with(this) 
        .load(url) 
        .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
        .into(imageView); 
    
  2. Verwenden asBitmap() und ein benutzerdefinierter Bitmapencoder immer betroffene Bilder als PNG-Dateien zu komprimieren:

    Glide.with(this) 
        .fromResource() 
        .asBitmap() 
        .encoder(new BitmapEncoder(Bitmap.CompressFormat.PNG,100)) 
        .load(R.drawable.testimg) 
        .into(imageView); 
    
+0

Danke, ist diskCacheStrategy (DiskCacheStrategy.SOURCE) hier drücken. Alle DecodeFormat.PREFER_ARGB_8888/GlideBuilder/GlideModule-Variationen sind nutzlos, um tatsächlich 24 Bit Farbe zu erzwingen. – Ryan

+0

Funktioniert nicht für mich. Bilder sind immer noch grün – RexSplode

1

Nur für den Fall, dass jemand versucht, alles, was oben aufgeführt ist und nichts davon funktionierte (wie in meinem Fall), gibt es eine andere Problemumgehung. Da während der Transformation grünliche Farbe auftritt, können wir eine Transformation vermeiden.

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

gut finden Sie heraus! –