BitmapFactory.decodeStream()中的Android重用流

时间:2012-11-16 13:59:02

标签: android memory-management bitmap stream

我们需要对从InputStream接收的图像进行下采样。它是从某个URL接收的图像,它可以是非常小或非常大。要将此图像放入内存中,我们必须对其进行下采样。首先,我们在inJustDecodeBounds的帮助下检索图像大小并计算必要的样本。然后我们通过在BitmapFactory.Options.inSampleSize中指定此示例来创建下采样位图。这个2步解码需要两次调用decodeStream()并且工作正常。

这适用于SD卡中的文件。但在我们的情况下,输入流无法重置,因此我们无法两次调用decodeStream()。由于其巨大的尺寸,输入流的克隆也不是一种选择。或者,我们可以为同一个URL创建2个HTTP请求:首先获取图像大小,然后使用下采样解码实际图像,但此解决方案似乎相当丑陋。

我们可以重用无法重置的流吗?或者请为此问题提出一些已知的解决方法。

1 个答案:

答案 0 :(得分:1)

如果您不想重复使用流,显然必须将其保存到RAM或SD卡中,因为网络InputStream(假设它不是缓冲的)不会保留下载的数据。

因此,如前所述解决此问题的选项是将图像直接保存到SD卡(可能在某些temp目录中),如果图像真的很大的话。