为什么使用inBitmap解码位图总是得到java.lang.IllegalArgumentException:将解码转换为现有位图

时间:2013-04-16 10:31:11

标签: android bitmapfactory

我正在使用inBitmap在android3 +上加载位图。但我总是得到java.lang.IllegalArgumentException: Problem decoding into existing bitmap.

在LruCache的entryMoved()函数中:我使用reusableBitmaps.add(new SoftReference<Bitmap>(oldValue.getBitmap()));来保留位图。

下次加载位图: 我在reusableBitmaps上使用iterator来找到我可以用于inBitmap的那个, 我使用迭代器来查找哪一个,就像在官方开发者网站上管理内存一样。

但不幸的是,总是失败,logcat显示java.lang.IllegalArgumentException: Problem decoding into existing bitmap.

任何人都可以给我一个示例或教程吗?

2 个答案:

答案 0 :(得分:10)

我用以下方法解决了这个问题:

options.inSampleSize = 1;

这是第二条评论中提到的视频提示。

答案 1 :(得分:0)

根据Bitmap api的说法,位图是不可变的。 Bitmap类没有公共构造函数。要创建一个,你必须为一个createBitmap方法指定位图的宽度和高度。所以你不能重用一个Bitmap实例。

但是,如果我错了,我猜错误仍然与位图保持位图的宽度和高度这一事实有关,这决定了用于解码位图的字节缓冲区的大小。

如果要将不同分辨率的图像解码到同一位图中,这很可能会导致错误。

要排除故障,请尝试使用相同的代码来解码宽度完全相同且高度完全相同的图像。如果你的错误消失了,那么我的理论是正确的,你需要在可重复使用的位图时满足图像大小。

我也对结果感兴趣,所以如果你能发表你的发现很棒。

干杯