将巨大的图像下载到Android上(6144x32768)

时间:2015-11-06 01:33:32

标签: java android image download android-download-manager

我们正在尝试将image下载到Android上,以便可以在应用中查看。我们可以加载它,但由于内存问题导致无法下载。图像是9MB然而分辨率是如此巨大我想象这是Android如何读取它的问题?

尝试:    直接写入SD    毕加索    OpenStream

URL url = new URL(link);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);

错误:

Java.lang.OutOfMemoryError: Failed to allocate a 805306380 byte allocation with 8329762 free bytes and 180MB until OOM

然而,我们需要实际下载图像。

1 个答案:

答案 0 :(得分:0)

当满载时,一个6k乘32k的图像将占用大约800 MB的内存,因为ARGB位图需要每像素4个字节。

当您通过USB复制它时它工作的原因很可能是因为Android在使用MTP复制时将大图像转码为适合手机显示的大小。

您可以使用下采样(Bitmap.Options.inSampleSize参数)或BitmapRegionDecoder下采样或显示图像的部分区域。

另一个选项是像Subsampling Scale Image View这样的库,它可以为您处理所有这些,例如使用以下代码:

SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(id.imageView);
imageView.setImage(ImageSource.uri("http://training-slides.com/slides-image/slide-one.jpeg"));

图像加载后,您可以使用双指缩放和触摸平移来浏览图像。