Android 4.1.2上ImageView中的图片倾斜问题

4
我有一个应用程序,在ImageView中显示图像,但在Android 4.1.2上遇到问题。已确认在三个不同的4.1.2设备上无法工作,而在2.3.7、4.2.1、4.3和4.4.2上可以工作。错误发生在几个不同的图像上,但并非所有图像都有问题。似乎有些特定的JPEG文件无法按预期工作。
实际上它是什么样子的,以及它在Android 4.1.2上的显示情况:

How the image looks How it looks on 4.1.2

上面的图片(左侧)就是这样一个有问题的图像文件。
设置显示图像的代码摘要如下:
Bitmap bitmap, background;
ImageView imageView = (ImageView)findViewById(R.id.imageView);

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
options.inPurgeable = true;
options.inInputShareable = true;
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dog, options);

background = bitmap.copy(Bitmap.Config.RGB_565, true);

Canvas canvas = new Canvas(background);
canvas.drawBitmap(bitmap, 0, 0, null);
// Some calls to canvas.drawText(....) here, but doesn't have to happen for the error to occur

imageView.setImageBitmap(background);

我发现可以在Photoshop中调整大小并重新保存上面的照片以使其正常工作,但不知道原因。由于我有几个这样的照片,我希望不必这样做。
我想知道Android 4.1.2上出现这个错误的原因是什么,是否有一些编程方法来修复它?
我已经尝试在Google上搜索“倾斜”,“歪曲”和类似的词汇,但很少提到它,也没有解决方案。这是我找到的一个带有截图的提及:
- 在Play Music中有其他人得到扭曲的专辑封面吗? (截图)

你能把RGB模式改成888看看会发生什么吗?我记得以前用rgb565时遇到过一些奇怪的问题... - rupps
1个回答

4

根据rupps的评论,我进行了更改:

bitmap.copy(Bitmap.Config.RGB_565, true)

收件人:

bitmap.copy(Bitmap.Config.ARGB_8888, true)

这确实解决了4.1.2设备的问题,同时对于所有其他测试设备的功能保持相似。从程序上讲,这确实解决了我的问题。但需要注意的是,它需要双倍的内存,因为每个像素占用4个字节而不是2个字节。
至于问题的根源,我从RGB_565的文档(链接)中读到:
“根据源的配置,此配置可能会产生轻微的视觉伪影。”
我认为这主要涉及色带/颜色/抖动问题,这并不能解释版本特定的问题,但或许可以解释为什么这个设置很麻烦。

1
谢谢!如果你找到了为什么会出现这个bug的原因,请告诉我。不然我要花很长时间才能解决它。 - Itay Bianco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接