我们需要对从 InputStream 接收到的图像进行下采样。它是从某个 URL 接收到的图像,它可以很小也可以很大。为了将这张图片放入内存中,我们必须对其进行下采样。首先,我们借助inJustDecodeBounds
并计算必要的样本来检索图像大小。然后我们通过在 中指定这个样本来创建下采样位图BitmapFactory.Options.inSampleSize
。这种两步解码需要两次调用,decodeStream()
并且工作正常。
这适用于 SD 卡中的文件。但在我们的例子中,输入流不能被重置,所以我们不能调用decodeStream()
两次。克隆输入流也不是一种选择,因为它的尺寸很大。或者,我们可以向同一个 URL 创建 2 个 HTTP 请求:首先获取图像大小,然后通过下采样解码实际图像,但这种解决方案似乎相当难看。
我们可以重用无法重置的流吗?或者请为此问题提出一些已知的解决方法。