【问题标题】:Skewed images in ImageView on Android 4.1.2Android 4.1.2 上 ImageView 中的倾斜图像
【发布时间】:2014-09-18 20:06:59
【问题描述】:

我有一个在 ImageView 中显示图像的应用,并且遇到了专门针对 Android 4.1.2 的问题。已确认不能在三个单独的 4.1.2 设备上工作,而在 2.3.7、4.2.1、4.3 和 4.4.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 上出现此错误的原因是什么,是否可以通过某种编程方式来修复它?

我已经在 Google 视图“倾斜”、“倾斜”、“扭曲”和类似的视图上尝试了运气,但很少提及它并且没有修复。这是我发现的屏幕截图提及:

【问题讨论】:

  • 能不能把RGB模式改成888看看有没有?我记得前段时间我在使用 rgb565 时遇到了一些奇怪的问题......

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


【解决方案1】:

根据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读到:

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

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

【讨论】:

  • 谢谢!我会花很长时间来破解这个错误。如果你知道为什么会这样,请告诉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多