我们正在尝试将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
然而,我们需要实际下载图像。
答案 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"));
图像加载后,您可以使用双指缩放和触摸平移来浏览图像。