Android 4.1.2上ImageView中的图像偏斜

时间:2014-09-18 20:07:00

标签: android android-canvas android-imageview android-4.2-jelly-bean android-bitmap

我有一个应用程序,在ImageView中显示图像,并且遇到专门针对Android 4.1.2的问题。在2.3.7,4.2.1,4.3和4.4.2上工作时,确认不能在三个单独的4.1.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上出现此错误的原因是什么,是否可能有一些程序化方法来修复它?

我已经在谷歌视图中试了一下“倾斜”,“倾斜”,“扭曲”等类似的情况,但很少提及它而且没有修复。这是我发现的屏幕截图:

1 个答案:

答案 0 :(得分:4)

基于rupps的评论,我改变了:

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

致:

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

这确实解决了4.1.2设备的问题,同时在所有其他测试设备的功能上保持相似。这确实以编程方式解决了我的问题。但请注意,它确实需要两倍的内存,因为每个像素存储在4个字节而不是2个字节。

关于问题的根源,我从the documentation of RGB_565读到:

  

此配置可能会产生轻微的视觉瑕疵,具体取决于源的配置。

我认为这主要与条带/颜色/抖动问题有关,这并不能解释版本特定的问题,但也许这个设置很麻烦。