Как передать динамический путь рисования во второй параметр BitmapFactory.decoreResource()

Я пытаюсь реализовать Bitmap memeCanvas = BitmapFactory.decodeResource(getResources(), xxx).copy(Bitmap.Config.ARGB_8888, true); для рисования изображений, которые я загружаю со своего телефона на свой ImageView. Поскольку у меня нет определенного пути для рисования, такого как R.drawable.hypotheticalImage, я не знаю, как передать ту же информацию для пути для рисования, который является динамическим, как второй параметр BitmapFactory.decodeResource().

Я могу предоставить код по запросу.

Метод decodeResource() предназначен только для доступных для рисования ресурсов. Возможно, вам нужен метод decodeFile()?

Mike M. 03.02.2019 05:14

@МайкМ. Так вы имеете в виду вот такой Bitmap memeCanvas = BitmapFactory.decodeFile(imageUri.getLastPathSegment()).copy‌​(Bitmap.Config.ARGB_‌​8888, true);?

Andros Adrianopolos 03.02.2019 05:21

О, нет, если у вас есть Uri. Извините, я думал, вы имеете в виду путь к файлу. Предполагая, что вы получили imageUri обычными методами, вы должны сделать что-то вроде BitmapFactory.decodeStream(getContentResolver().openInputStr‌​eam(imageUri)).

Mike M. 03.02.2019 05:26

@МайкМ. Нет метода для getContentResolver() в decodeStream.

Andros Adrianopolos 03.02.2019 06:27

Я не уверен, что вы говорите. Предполагая, что вы находитесь в Context — например, Activity — что кажется вероятным, поскольку вы вызываете getResources() в своем примере с decodeResource(), синтаксис, который я дал выше, абсолютно правильный.

Mike M. 03.02.2019 06:38

@МайкМ. Я не уверен. Когда я поставил decodeStream(getContentResolver().openInputStream(imageUri))‌​, getContentResolver был красным.

Andros Adrianopolos 03.02.2019 07:41

В каком ты классе? То есть, где именно у вас есть этот код?

Mike M. 03.02.2019 07:42

@МайкМ. Фрагментарно, но я уже решил проблему. Спасибо большое за помощь. Вы можете проверить мое решение ниже.

Andros Adrianopolos 03.02.2019 07:46
0
8
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это мое решение. Мне пришлось вызвать getContext(), чтобы получить доступ к getContentResolver() и обернуть все это в блок try-catch.

Bitmap memeCanvas = null;
        try {
            memeCanvas = BitmapFactory
                    .decodeStream(getContext()
                            .getContentResolver()
                            .openInputStream(imageUri))
                    .copy(Bitmap.Config.ARGB_8888, true);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

Другие вопросы по теме