我已经研究这个很久了。我有两部三星手机,一部是s4,一部是三星win。我的S4上的图像是这样的:
android - 高DPI手机上的低质量图像-LMLPHP
如果我通常在图像查看器上查看图像,则图像看起来是这样的:
android - 高DPI手机上的低质量图像-LMLPHP
事实上这就是它的样子。我的三星赢了,但不是s4。
最初图像的大小是700x256,然后将其升级到1280x455(适用于三星s4),但仍然没有效果。看起来一样。我不太确定这是否是梯度带或缩放问题。我读了几篇文章和博客,并做了一些解决方案,比如将这些图像放到/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应用程序的漫画。不幸的是,无论我做了什么,这个应用程序在s4上看起来都很糟糕,因为像素是污点。我正在使用Glide加载图像并尝试this,仍然是相同的事情。除了s4和三星win,我没有试过其他手机。我放弃了,我需要帮助。
任何帮助都将不胜感激!

最佳答案

除了使用android为您提供的内置功能外,使用glide还有很多原因,比如内存管理和在视图上使用pinch-zoom来命名一些功能。
当使用我发现的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);
}

这些是一系列的更新,我一定会实施,以消除带状和劣质图像。

07-24 09:49
查看更多