1

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

这适用于 SD 卡中的文件。但在我们的例子中,输入流不能被重置,所以我们不能调用decodeStream()两次。克隆输入流也不是一种选择,因为它的尺寸很大。或者,我们可以向同一个 URL 创建 2 个 HTTP 请求:首先获取图像大小,然后通过下采样解码实际图像,但这种解决方案似乎相当难看。

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

4

1 回答 1

1

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

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

于 2012-11-16T14:09:54.010 回答