【问题标题】:Corrupted Images From BitmapFactory来自 BitmapFactory 的损坏图像
【发布时间】:2015-04-29 04:50:02
【问题描述】:

有时,当我下载图像时,其中一些会出现灰线,如下面的示例图像所示:

这往往只发生在糟糕的网络条件下。

我的图像解码代码本质上是 UIL 的修改版本:

Bitmap decodedBitmap = BitmapFactory.decodeStream(stream, null, decodingOptions);

其中流只是远程文件的 InputStream

现在我在 Google Play 音乐应用上看到了这种行为,这让我怀疑这是否是 BitmapFactory 的问题。 到目前为止,我提出的唯一解决方案可能是进行校验和比较,以确保下载了整个图像。

编辑:

HttpURLConnection conn = getConnection(path);
InputStream inputStream = conn.getInputStream()
stream = new ContentLengthInputStream(new BufferedInputStream(download, BUFFER_SIZE), conn.getContentLength())

【问题讨论】:

  • 我不认为它与 BitmapFactory 相关,因为它只是解码流,更像是蒸汽没有被完全填满,是的,做一个 MD5 校验和就足够了,然后你可以读取文件并获取它的 Uri。
  • @Raykud 我对校验和解决方案犹豫不决的唯一原因是它增加了每个图像下载的开销。如果有帮助,我已经发布了用于获取 InputStream 的代码

标签: android bitmap bitmapfactory corrupt-data


【解决方案1】:

通过以下步骤解决:

  • 正常打开图像的 InputStream
  • 将流写入 ByteArrayOutputStream
  • 将 ByteArrayOutputStream 的长度与 HttpURLConnection 中的 Content-Length 标头进行比较
  • 如果不匹配,则说明您在传输过程中丢失了数据
  • 否则,您可以将 ByteArrayOutputStream 转换为 ByteArrayInputStream 并在您认为合适的时候与 BitmapFactory 一起使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多