高DPI手机上的低质量图像

时间:2016-10-17 10:01:07

标签: android imageview android-imageview android-glide

我现在已经研究了很长一段时间了。我有2部三星手机,一部是S4,一部是三星Win。我的S4上的图像如下所示:

enter image description here

如果我在图像查看器上正常查看图像,则图像看起来像这样:

enter image description here

事实上,这就是它需要的样子。它在我的三星Win上看起来像这样但在S4上却没有。

最初图像的尺寸为700x256,然后将其升级为三星S4的1280x455,仍然无效。它看起来一样。我不太确定这是否是渐变条带或缩放问题。我已经阅读了几篇帖子和博客,并做了一些解决方案,例如将这些图像放在/raw文件夹中并进行设置:

@Override
public void onAttachedToWindow()
{
    super.onAttachedToWindow();
    getWindow().setFormat(PixelFormat.RGBA_8888);
}

没有效果。在我的图像上仍然是相同的斑点像素。

我已阅读以下帖子:

Android: Using linear gradient as background looks banded

http://www.curious-creature.com/2010/12/08/bitmap-quality-banding-and-dithering/

http://android.nakatome.net/2010/04/bitmap-basics.html

我工作的性质需要一点保密性,所以我裁剪了这里显示的图像。我实际上做的是一个类似于Webtoon app的漫画。不幸的是,无论我做了什么,该应用程序在S4上看起来很可怕,因为像素是斑点。我正在使用Glide加载图片并尝试this,仍然是同样的事情。除了S4和三星Win,我还没有尝试过任何其他手机。我放弃了,我需要帮助。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

除了使用Android为您提供的内置功能外,使用Glide的原因有很多,例如内存管理和视图上的缩放缩放等等。

使用我找到的Glide库时,有几种不同的方法和组件可能会导致绑定和伪影。

使用下面的库的加载协议时

SimpleTarget target  = new SimpleTarget<BitmapDrawable>() {
        @Override
        public void onResourceReady(@NonNull BitmapDrawable bitmapDrawable, @Nullable Transition<? super BitmapDrawable> transition) {
            bitmapDrawable.setDither(true);
            bitmapDrawable.setAntiAlias(true);
            pViewHolder.updateBitmap(bitmapDrawable.getBitmap());
        }
    };

    mGlideRequest.clone().format(DecodeFormat.PREFER_ARGB_8888).signature(signature).diskCacheStrategy(DiskCacheStrategy.DATA).load(current.mUri).into(target);

对我提高质量和删除我在渐变上看到的乐队的最大区别是.diskCacheStrategy(DiskCacheStrategy.DATA),它迫使图书馆下载并存储原始图像以供参考和稍后加载。

还可以看出格式被强制进入DecodeFormat.PREFER_ARGB_8888。这是因为Android可以使用565而不是888 RGB表示来处理资源。出于这个原因,我们要求我们在活动中将它添加到我们的窗口中:

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}

这些是我必须实施的一系列更新,以便删除条带和质量不佳的图像。