2015-02-26 2 views
2

раз в то время, когда я загрузка изображений, некоторые из них будут появляться с серыми линиями, как показано в образце изображения ниже: ExampleПоврежденные изображения Из BitmapFactory

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

Мой код для декодирования изображений по существу Modded версии, что от ИЮОЖА:

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

где поток просто InputStream в удаленный файл

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

Edit:

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

Я не думаю, что его отношение к BitmapFactory в качестве единственного декодирования поток, это было бы больше похоже на то, что пар не был полностью заполнен, и да, выполнить контрольную сумму MD5 было бы достаточно, и тогда вы можете просто прочитать файл и получить Uri для него. – Raykud

+0

@Raykud Единственная причина, по которой я не решаюсь решить проблему с контрольной суммой, заключается в том, что она добавляет накладные расходы на каждую загрузку одного изображения. Я опубликовал код, который я использую, чтобы получить InputStream, если это поможет – nyx

ответ

0

решаемые его, выполнив следующие действия:

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