6

这是原始图像:

在此处输入图像描述

这是使用 ImageView 渲染的图像:

在此处输入图像描述

但是,有时候当图片在轮播中的时候,刷回图片可能会导致图片正确渲染,这就更诡异了……

在 LG G3 (Android 5.1) 和 Genymotion (Android 4.4.4) 上都观察到了这种行为。我正在使用 Glide 库加载图像,使用ARGB_8888解码格式:

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

3 回答 3

8

这是已解决的问题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);
    
于 2015-08-24T14:37:25.810 回答
2

以防万一有人尝试了上面列出的所有方法但都没有奏效(就像我的情况一样),还有另一种解决方法。由于在转换过程中会出现绿色,我们可以避免转换。

Glide.with(context)
     .load(url)
     .dontTransform()
     .into(holder.productImage);
于 2017-01-26T15:06:55.357 回答
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(). 
于 2017-03-23T10:45:52.050 回答