Skia Decoder не удается декодировать удаленный поток
Вопрос
Я пытаюсь открыть удаленный поток изображения JPEG и преобразовать его в растровый объект:
BitmapFactory.decodeStream(
new URL("http://some.url.to/source/image.jpg")
.openStream());
Декодер возвращает NULL и в журналах, я получаю следующее сообщение:
DEBUG/skia(xxxx): --- decoder->decode returned false
Примечание:
1. Длина содержимого не нулевой и тип контента image/jpeg
2. Когда я открываю URL в браузере, я могу увидеть изображение.
Что я здесь не хватает?
Пожалуйста помоги. Спасибо.
Решение 2
кажется, была какая-то проблема с потоком, а в том, как андроид обрабатывал его; патч в этом отчет об ошибке решил проблему на данный момент.
Другие советы
Решение, приведенное в Android ошибка n ° 6066 состоят в том, чтобы переопределить STD FilterInputStream, а затем отправьте его на растровое производство.
static class FlushedInputStream extends FilterInputStream {
public FlushedInputStream(InputStream inputStream) {
super(inputStream);
}
@Override
public long skip(long n) throws IOException {
long totalBytesSkipped = 0L;
while (totalBytesSkipped < n) {
long bytesSkipped = in.skip(n - totalBytesSkipped);
if (bytesSkipped == 0L) {
int byteValue = read();
if (byteValue < 0) {
break; // we reached EOF
} else {
bytesSkipped = 1; // we read one byte
}
}
totalBytesSkipped += bytesSkipped;
}
return totalBytesSkipped;
}
}
а затем используйте функцию декодера:
Bitmap bitmap = BitmapFactory.decodeStream(new FlushedInputStream(inputStream));
Другое решение, которое я нашел, - это просто дать буферизенпуфнуть по течению до BitmapFactory:
Bitmap bitmap = BitmapFactory.decodeStream(new BufferedInputStream(inputStream));
Эти два решения должны сделать трюк.
Больше информации можно найти в отчете об ошибках Комментарии: Android ошибка № 6066.
Для меня проблема с типом цвета изображения: Ваше изображение в цвете = Cymk не в RGB
Я нашел библиотеку, которая может открывать изображения, на которых не работает Skia Android. Это может быть полезно для определенных усы:
https://github.com/suckgamony/rapiddecoder.
Для меня он решил проблему, так как я не загружаю много изображений одновременно и много изображений, которые я загружаю, есть профиль ICC. Я не пробовал интегрировать его с некоторыми общими библиотеками, такими как пикассо или скользну.