我现在已经研究了很长一段时间了。我有2部三星手机,一部是S4,一部是三星Win。我的S4上的图像如下所示:
如果我在图像查看器上正常查看图像,则图像看起来像这样:
事实上,这就是它需要的样子。它在我的三星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,我还没有尝试过任何其他手机。我放弃了,我需要帮助。
非常感谢任何帮助!
答案 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);
}
这些是我必须实施的一系列更新,以便删除条带和质量不佳的图像。