Поврежденные изображения из BitmapFactory

Время от времени, когда я загружаю изображения, некоторые из них отображаются с серыми линиями, как показано на примере изображения ниже:пример

Это, как правило, происходит исключительно в плохих условиях сети.

Мой код для декодирования изображений по сути является модифицированной версией UIL:

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

где поток - это просто InputStream для удаленного файла

Теперь я видел такое поведение в приложении Google Play Music, которое заставляет меня задуматься, если это проблема с BitmapFactory. Единственное решение, которое я нашел до сих пор, - это, возможно, сравнение контрольных сумм, чтобы убедиться, что весь образ был загружен.

Редактировать:

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

1 ответ

Решение

Решил это, используя следующие шаги:

  • Откройте InputStream для изображения как обычно
  • Записать поток в ByteArrayOutputStream
  • Сравните длину ByteArrayOutputStream с заголовком Content-Length из HttpURLConnection
  • Если несоответствие, то вы потеряли данные в пути
  • В противном случае вы можете преобразовать свой ByteArrayOutputStream в ByteArrayInputStream и использовать с BitmapFactory, как вам удобно
Другие вопросы по тегам