Skia Decoder не удается декодировать удаленный поток

StackOverflow https://stackoverflow.com/questions/2787015

  •  03-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь открыть удаленный поток изображения 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. Я не пробовал интегрировать его с некоторыми общими библиотеками, такими как пикассо или скользну.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top