Bitmap.CompressFormat.WEBP на альфа-канале Android API 19 становится черным

Я написал сервис, который извлекает изображения из Интернета (JPEG, PNG, ...), которые затем сохраняю на диск в формате webp.

Я сохраняю изображение, используя следующий код:

try (FileOutputStream fos = new FileOutputStream(imgFile)) {
    bitmap.compress(Bitmap.CompressFormat.WEBP, 100, fos);
} catch (IOException e) {
    Log.e(TAG, "IOException writing file");
} catch (SecurityException e) {
    Log.e(TAG, "SecurityException writing file");
}

У меня нет никаких предупреждений.

Если приложение работает на устройстве с API 22 или 23, файлы декодированных изображений отображаются с альфа-каналом, если он присутствует.

Если я запускаю приложение в эмуляторе API19, декодированное изображение не отображается с альфа-каналом (оно отображается черным цветом).

Я предпочел WEBP, потому что он легче PNG и должен иметь альфа-канал.

PS: Пробовал с качеством 80 и 100 тоже

Комментарий 1

Полученное изображение представляет собой PNG с альфа-каналом.

То же изображение на других устройствах (и эмуляторах тоже) с API> 22 при преобразовании в WEBP показывает прозрачность.

Я пробовал и с другими PNG. Если я использую полученное растровое изображение и сохраняю его в PNG, на всех устройствах оно отображается правильно с прозрачностью, в том числе и в API 19.

Проблема проверяется только тогда, когда я сохраняю ее в формате webp. Я попытался вытащить закодированный файл webp из API эмулятора 19, и у него больше нет альфа-канала.

Я получаю растровое изображение таким образом:

        try (InputStream is = new URL(mImageUrl).openStream()) {
            bitmap = BitmapFactory.decodeStream(is);
        } catch (MalformedURLException e) {
            Log.e(TAG, "MalformedURLException " + e.getMessage());
        } catch (IOException e) {
            Log.e(TAG, "IOException decoding url " + e.getMessage());
        }

КОММЕНТАРИЙ 2

Если я попытаюсь заменить файл WEBP в эмуляторе файлом с прозрачностью с моего компьютера, то... приложение покажет изображение с прозрачностью.

Итак, проблема в том, как файл сохраняется!


person ryuujin    schedule 10.09.2016    source источник
comment
Проверьте сам WebP, используя какой-либо инструмент на вашем компьютере для разработки. Имеет ли сохраненный вами WebP альфа-канал? Другими словами, проблема в сохранении изображения, или в расшифровке изображения?   -  person CommonsWare    schedule 10.09.2016
comment
Полученное изображение представляет собой PNG с альфа-каналом. Это же изображение в других устройствах (и эмуляторах тоже) с API › 22 при конвертации в WEBP показывает прозрачность. Я пробовал и с другими PNG. Если я использую полученное растровое изображение и сохраняю его в PNG, на всех устройствах оно отображается правильно с прозрачностью, в том числе и в API 19. Проблема проверяется только тогда, когда я сохраняю ее в формате webp. Я попытался вытащить закодированный файл webp из API эмулятора 19, и у него больше нет альфа-канала.   -  person ryuujin    schedule 10.09.2016
comment
теперь я пытаюсь загрузить изображение WEBP с прозрачностью со своего компьютера в эмулятор... Я хочу посмотреть, как это будет обрабатываться.   -  person ryuujin    schedule 10.09.2016
comment
Я могу подтвердить, что проблема в том, как файл сохраняется.   -  person ryuujin    schedule 10.09.2016
comment
Я не вижу никаких ошибок, связанных с этим, на b.android.com — большинство жалоб на WebP кажется, в отображении изображений, а не в их кодировании. Опять же, кодирование WebP с прозрачностью может быть не таким уж распространенным явлением. К сожалению, у меня нет никаких предложений, кроме поиска какой-либо сторонней библиотеки, которую вы можете использовать.   -  person CommonsWare    schedule 10.09.2016
comment
Спасибо! Я продолжаю расследование. Я нашел еще один вопрос в stackoverflow с той же проблемой, но без ответа: stackoverflow.com/questions/38753798/ :(   -  person ryuujin    schedule 10.09.2016
comment
OTOH, этот вопрос указывает на то, что libwebp, по-видимому, является вариантом, так что это плюс.   -  person CommonsWare    schedule 10.09.2016
comment
Любое обновление, чтобы решить эту проблему?   -  person Lakindu Akash    schedule 17.10.2019