[英]Android load big images from external storage
我需要将SD卡中的大量大图片(500个.png文件)加载到我的应用中。 我是否总是需要将图像转换为位图并制作位图文件? 我不想调整堆的大小。 还有其他方法可以从SD卡读取图像吗?
如果要在视图中显示它们,则必须将它们全部加载到内存中。
您没有提到图像将变大,但是我们在图库中要做的是保留这些位图的SoftReference
列表,以便垃圾收集器在不可见时将其丢弃(例如,当显示它们的视图将被丢弃-确保确实发生这种情况,例如通过使用AdapterView
。 将此与这些位图的延迟加载相结合,您应该会很好。
如果图像尺寸很大,则必须先调整它们的大小,然后再加载到ImageView中。 否则,即使一张照片也很容易引起内存不足的问题。 我不知道您要同时显示多少张图像以及它们的大小。 但我建议您在显示它们之前调整它们的大小。
要调整图像大小并显示它,可以使用以下代码:
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inJustDecodeBounds = true;
BitmapFactory.decodeStream(fileInputStream, null, bitmapOptions);
//reduce the image size
int imageWidth = bitmapOptions.outWidth;
int imageHeight = bitmapOptions.outHeight;
int scale = 1;
while (imageWidth/scale >= screenWidth && imageHeight/scale >= screenHeight) {
imageWidth = imageWidth / 2;
imageHeight = imageHeight / 2;
scale = scale * 2;
}
//decode the image with necessary size
fileInputStream = new FileInputStream(cacheFile);
bitmapOptions.inSampleSize = scale;
bitmapOptions.inJustDecodeBounds = false;
imageBitmap = BitmapFactory.decodeStream(fileInputStream, null, bitmapOptions);
ImageView imageView = (ImageView)this.findViewById(R.id.preview);
imageView.setImageBitmap(imageBitmap);
在我的android项目中,我正在使用这段代码来调整我的高清壁纸的大小以进行审查。
应用程序中图像的内部表示形式是位和字节的集合,而不是任何特定格式(png,bmp等)的图像。
当由BitmapFactory加载图像时,图像将转换为此内部表示形式。
一次加载所有位图通常不是一个好主意,您将很快耗尽内存...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.