所有位图都需要相同数量的内存吗?我该如何加载它们?

时间:2013-08-15 08:50:59

标签: android

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

  1. 我有两张相同尺寸的图像(例如150px * 150px)。其中一个占用更少的内存(如png或jpg),因为只显示很少的颜色。加载为位图时,它们是否仍然占用相同的内存量?我应该以不同的方式加载它们吗?

  2. 加载图片时有没有办法节省内存?(我将其作为样本大小加载)

2 个答案:

答案 0 :(得分:0)

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

如果你有8bpp颜色,那么每个图像将是22500字节 如果你的32bpp颜色比每个图像都要90000字节。

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

否则,您将获得内存不足异常。

答案 1 :(得分:0)

  1. 如果您知道某些文件只能使用系统的标准较小颜色集显示,则可以使用Bitmap.Config.ARGB_4444或Bitmap.Config.RGB_565。 (检查此page)(您可以在第一次获取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