我正在使用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.
任何人都可以给我一个示例或教程吗?
答案 0 :(得分:10)
我用以下方法解决了这个问题:
options.inSampleSize = 1;
这是第二条评论中提到的视频提示。
答案 1 :(得分:0)
根据Bitmap api的说法,位图是不可变的。 Bitmap类没有公共构造函数。要创建一个,你必须为一个createBitmap
方法指定位图的宽度和高度。所以你不能重用一个Bitmap实例。
但是,如果我错了,我猜错误仍然与位图保持位图的宽度和高度这一事实有关,这决定了用于解码位图的字节缓冲区的大小。
如果要将不同分辨率的图像解码到同一位图中,这很可能会导致错误。
要排除故障,请尝试使用相同的代码来解码宽度完全相同且高度完全相同的图像。如果你的错误消失了,那么我的理论是正确的,你需要在可重复使用的位图时满足图像大小。
我也对结果感兴趣,所以如果你能发表你的发现很棒。
干杯