2015-11-06 62 views
0

我们正尝试将一个image下载到Android上,以便在应用程序中查看它。我们可以加载它,但由于内存问题,无法下载。该图像是9MB,但分辨率如此之大我想象这是一个Android的阅读它的问题?将一个巨大的图像下载到Android上(6144x32768)

尝试: 写直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 

我们需要实际下载图像,但是。

+0

那么你的问题是什么?无法下载图片?你不知道如何显示一块图像? – Tom

+0

实际从服务器下载图像并对其进行解码时,我们遇到了内存不足问题。我们正在使用BitmapFactory.decodestream –

+1

你能发布相关代码吗? – Tom

回答

0

由于ARGB位图需要每像素4字节,因此一张6k乘32k的图像在完全加载时将占用大约800 MB的内存。

当您通过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")); 

一旦在图像视图加载图像,你可以使用双指 - 缩放和触摸平移来浏览图像。

+0

这是我们正在使用的库,尝试了我们得到的代码:无法初始化位图解码器 11-06 03:39:55.592 19690-21365/com.training_slides.www.slides E/SubsamplingScaleImageView:java.io. FileNotFoundException:没有内容提供者:http://training-slides.com/slides-image/slide-one.jpeg –

+0

是的,它看起来像它不能直接从HTTP uris加载图像。尝试将文件首先从HTTP源复制到临时文件,然后将文件路径提供给SubsamplingScaleImageView。 – Marius

相关问题