4

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

在 LruCache 的entryMoved()功能中:我reusableBitmaps.add(new SoftReference<Bitmap>(oldValue.getBitmap()));用来保存位图。

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

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

任何人都可以给我一个样本或教程?

4

2 回答 2

10

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

options.inSampleSize = 1;

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

于 2013-09-03T23:31:14.627 回答
0

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

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

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

要排除故障,请尝试使用您自己的相同代码来解码完全相同宽度和完全相同高度的图像。如果你的错误消失了,那么我的理论是正确的,当涉及到可重复使用的位图时,你需要考虑图像大小。

我也对结果感兴趣,所以如果你能发布你的发现,那就太好了。

干杯

于 2013-09-03T23:40:59.097 回答