1

我有一个 168.2KB 和 1991x1756 的 PNG 图像,并尝试将其导入到Bitmapusing BitmapFactory.decodeStream(). 问题是我遇到OutOfMemoryErrorBitmap大小最终为 13,657KB 的地方。
我不明白为什么导入后文件这么大以及如何减轻这种情况。
似乎这个OutOfMemoryError问题在解码图像中很常见,Bitmap但找不到解决方法。有任何想法吗?

Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, bitmapOptions);

E/AndroidRuntime(10744): java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap Size=7815KB, Allocated=3279KB, Bitmap Size=13657KB)

4

2 回答 2

4

png 文件是高度压缩的,这意味着磁盘上的文件大小比它包含的所有数据加载到内存时要小得多。
位图是图像的一种非常简单的表示,其中每个像素都由一个值表示。此值的大小取决于当前设置(您可能听说过 32 位图像、16 位图像或 8 位图像,它们是一些常见的尺寸)。

要计算表示为位图的图像的真实大小,您必须计算像素数,并将其与每个像素的位数相乘。
您的图像为 1991x1756 像素(总共3 496 196像素)。如果您使用 ARGB_8888 格式(每个颜色/alpha 通道一个字节 = 每个像素 4 个字节)加载位图,您最终会得到3 496 196 * 4 = 13 984 784字节。

您可以通过使用更少的字节/通道(例如 RGB_565)来减小总大小,尽管这也会降低图像的质量。更好的选择很可能是减小图像的大小,或者使用inSampleSize您的参数导入它们BitmapFactory.Options以加载较小的图像。

于 2012-04-14T19:45:46.320 回答
1

我相信PNG图像被严重压缩,但android中的位图没有被压缩,因为每个像素有4个字节(ARGB)

所以 1991 * 1756 * (4 bytes) 大约是 13657 KB

因此,请尝试使用较小的图像或 insample size Options 的位图选项来减小尺寸。

看看这篇文章: Decoding bitmaps in Android with the right size

于 2012-04-14T19:43:02.413 回答