我有一个应用程序,在ImageView
中显示图像,并且遇到专门针对Android 4.1.2的问题。在2.3.7,4.2.1,4.3和4.4.2上工作时,确认不能在三个单独的4.1.2设备上工作。几个不同的图像发生错误,但不是全部。似乎有些特定的JPEG文件无法正常工作。
它的实际外观以及它在Android 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上出现此错误的原因是什么,是否可能有一些程序化方法来修复它?
我已经在谷歌视图中试了一下“倾斜”,“倾斜”,“扭曲”等类似的情况,但很少提及它而且没有修复。这是我发现的屏幕截图:
答案 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
读到:
此配置可能会产生轻微的视觉瑕疵,具体取决于源的配置。
我认为这主要与条带/颜色/抖动问题有关,这并不能解释版本特定的问题,但也许这个设置很麻烦。