Android从外部存储加载大图像

时间:2011-04-08 11:58:40

标签: android image load

我需要从SD卡加载大量大图像(500个.png文件)到我的应用程序。我是否总是要将图像转换为位图并制作位图文件?我不想调整堆大小。 还有另一种方法从SD卡读取图像吗?

3 个答案:

答案 0 :(得分:1)

如果您在视图中显示它们,则必须将它们完整地加载到内存中。

你没有提到你的图片会有多大,但是我们在照片库中做的是将SoftReference列表保存到这些位图中,以便垃圾收集器可以将它们扔掉'不可见(即当显示它们的视图被丢弃时 - 确保实际发生这种情况,例如使用AdapterView)。将它与这些位图的延迟加载相结合,你应该很好。

答案 1 :(得分:0)

应用中图像的内部表示是位和字节的集合 - 不是任何特定格式的图像(png,bmp等)。

当BitmapFactory加载图像时,图像将转换为此内部表示。

一次加载所有位图通常不是一个好主意,你的内存会快速耗尽......

答案 2 :(得分:0)

如果您的图片尺寸非常大,则必须在加载到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项目中,我正在使用这段代码来调整我的高清壁纸以查看它。

Android Save And Load Downloading File Locally