我正在做一个需要使用大图像作为地图的项目。该图像约为 95MB,分辨率为 12100 x 8000 像素。
我不需要一次完整的图像,我只需要 1000 x 1000 像素的细节(它并不总是相同的细节,只是抓住相同的部分不是我可以使用的解决方案)。所以我不能只用BitmapOptions
.
我环顾四周,发现了创建一个FileInputStream
(图像在 SD 卡上)的想法,然后我可以使用decodeStream(InputStream is, Rect outPadding, BitmapFactory.Options opts)
. 这样我就不会将整个内容加载到内存中。我试过了,但是当我尝试加载图像时它只是崩溃了。这是我的代码:
FileInputStream stream = null;
try {
stream = new FileInputStream(path);
} catch(Exception e) {
Log.e("inputstream",e.toString());
}
Rect rect = new Rect(a,b,c,d);
return BitmapFactory.decodeStream(stream, rect, null);
当我尝试加载图像时,活动关闭并且 LogCat 告诉我java.lang.outOfMemoryError
。为什么会崩溃?我认为使用流它应该“即时”处理图像,但我对错误的唯一解释是它试图将孔图像加载到内存中。有谁知道我如何从图像中加载细节,或者为什么这个想法不起作用?