【发布时间】:2012-11-07 18:48:57
【问题描述】:
我正在做一个需要使用大图像作为地图的项目。该图像约为 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。为什么会崩溃?我认为使用流它应该“即时”处理图像,但我对错误的唯一解释是它试图将孔图像加载到内存中。有谁知道我如何从图像中加载细节,或者为什么这个想法不起作用?
【问题讨论】:
标签: android out-of-memory large-files imagemap