0

我最近一直在做一个 Android 项目,我需要在其中显示很多图片。到目前为止,我一直在使用 BitmapFactory 类将它们加载到内存中。我遇到了内存不足异常的问题。这是我的第一个问题:

  1. 我有两张图片,大小相同(例如 150 像素 * 150 像素)。其中之一占用的内存要少得多(如 png 或 jpg),因为只显示很少的颜色。当作为位图加载时,它们是否仍然占用相同数量的内存?我应该以不同的方式加载它们吗?

  2. 加载图像时有没有办法节省内存?(我正在加载它作为样本大小)

4

2 回答 2

0

位图使用宽度 x 高度 x 颜色深度 / 8 字节常量。

如果您有 8bpp 颜色,则每个图像将是 22500 字节。
如果您有 32bpp 颜色,则每个图像将是 90000 字节。

如果您使用 ImageInputStream 加载图像,您必须将 a 传递byte[]image.load方法,请确保正确设置缓冲区的大小 byte[] buff = new byte[22500]

否则,您将收到内存不足异常。

于 2013-08-15T09:01:35.457 回答
0
  1. 如果您知道某些文件只能使用系统标准的较小颜色集显示,您可以使用 Bitmap.Config.ARGB_4444 或 Bitmap.Config.RGB_565。(查看此页面)(您可以在第一次获取 Bitmap 对象时设置 Bitmap.Config。)但是,不建议这样做,因为这更像是“压缩质量损失”。当位图在内存中(不是文件)时,相同大小的 PNG 文件和 BMP 文件占用相同的内存。从文件加载到内存时,PNG 文件将被解压缩为具有透明度的 BMP。

  2. 这个 Android 官方开发者页面正好处理你正在做的事情:http: //developer.android.com/training/displaying-bitmaps/load-bitmap.html

  3. 这个页面也可以帮助你。 http://developer.android.com/training/displaying-bitmaps/manage-memory.html

于 2013-08-15T09:33:20.510 回答