繁体   English   中英

Android从外部存储加载大图像

[英]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项目中,我正在使用这段代码来调整我的高清壁纸的大小以进行审查。

Android在本地保存并加载下载文件

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

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

一次加载所有位图通常不是一个好主意,您将很快耗尽内存...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM