Как получить изменяемое растровое изображение с помощью ImageDecoder? - PullRequest
2 голосов
/ 17 января 2020

Я создаю растровое изображение следующим образом

       ImageDecoder.Source source = ImageDecoder.createSource(this.getContentResolver(), mSourceUri);
        try {
            bitmap = ImageDecoder.decodeBitmap(source));
        } catch (IOException e) {
            e.printStackTrace();
        }

Возвращает неизменное растровое изображение. Я видел документацию Google , и есть метод setMutableRequired(), но я не мог найти, как использовать этот метод. Это не работает на ImageDecoder, а также источник

Ответы [ 3 ]

1 голос
/ 17 января 2020

Немного красивее решение

imageBitmap = imageBitmap.copy(Bitmap.Config.ARGB_8888, true);

См. этот ответ

0 голосов
/ 01 мая 2020

Введите ImageDecoder.OnHeaderDecodedListener в качестве второго параметра для ImageDecoder.decodeBitmap().

Внутри слушателя вы получите ImageDecoder, в который вы можете внести желаемые изменения.

ImageDecoder.decodeBitmap(imageSource, (decoder, info, source) -> {
    decoder.setMutableRequired(true);
});
0 голосов
/ 17 января 2020

До тех пор, пока на этот вопрос не придет правильный ответ. Любой человек с такой же сложностью, что и мой, может использовать метод BitmapFactory для получения изменяемого растрового изображения

BitmapFactory.Options options = new BitmapFactory.Options();
options.inMutable = true;
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(mSourceUri), null, options);

, вдохновленного этим ответом .

...