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

对于SD卡中的文件,此方法就很好。但是在我们的情况下,输入流无法重置,因此我们不能调用decodeStream()两次。由于输入流很大,因此也无法克隆输入流。或者,我们可以对相同的URL创建2个HTTP请求:首先获取图像大小,然后使用下采样对实际图像进行解码,但是这种解决方案看起来很难看。

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

最佳答案

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

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

08-15 19:04