我最近一直在做一个 Android 项目,我需要在其中显示很多图片。到目前为止,我一直在使用 BitmapFactory 类将它们加载到内存中。我遇到了内存不足异常的问题。这是我的第一个问题:
我有两张图片,大小相同(例如 150 像素 * 150 像素)。其中之一占用的内存要少得多(如 png 或 jpg),因为只显示很少的颜色。当作为位图加载时,它们是否仍然占用相同数量的内存?我应该以不同的方式加载它们吗?
加载图像时有没有办法节省内存?(我正在加载它作为样本大小)
我最近一直在做一个 Android 项目,我需要在其中显示很多图片。到目前为止,我一直在使用 BitmapFactory 类将它们加载到内存中。我遇到了内存不足异常的问题。这是我的第一个问题:
我有两张图片,大小相同(例如 150 像素 * 150 像素)。其中之一占用的内存要少得多(如 png 或 jpg),因为只显示很少的颜色。当作为位图加载时,它们是否仍然占用相同数量的内存?我应该以不同的方式加载它们吗?
加载图像时有没有办法节省内存?(我正在加载它作为样本大小)
位图使用宽度 x 高度 x 颜色深度 / 8 字节常量。
如果您有 8bpp 颜色,则每个图像将是 22500 字节。
如果您有 32bpp 颜色,则每个图像将是 90000 字节。
如果您使用 ImageInputStream 加载图像,您必须将 a 传递byte[]
给image.load
方法,请确保正确设置缓冲区的大小
byte[] buff = new byte[22500]
:
否则,您将收到内存不足异常。
如果您知道某些文件只能使用系统标准的较小颜色集显示,您可以使用 Bitmap.Config.ARGB_4444 或 Bitmap.Config.RGB_565。(查看此页面)(您可以在第一次获取 Bitmap 对象时设置 Bitmap.Config。)但是,不建议这样做,因为这更像是“压缩质量损失”。当位图在内存中(不是文件)时,相同大小的 PNG 文件和 BMP 文件占用相同的内存。从文件加载到内存时,PNG 文件将被解压缩为具有透明度的 BMP。
这个 Android 官方开发者页面正好处理你正在做的事情:http: //developer.android.com/training/displaying-bitmaps/load-bitmap.html
这个页面也可以帮助你。 http://developer.android.com/training/displaying-bitmaps/manage-memory.html