Поврежденные изображения из 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, как вам удобно