Я пытаюсь реализовать Bitmap memeCanvas = BitmapFactory.decodeResource(getResources(), xxx).copy(Bitmap.Config.ARGB_8888, true); для рисования изображений, которые я загружаю со своего телефона на свой ImageView. Поскольку у меня нет определенного пути для рисования, такого как R.drawable.hypotheticalImage, я не знаю, как передать ту же информацию для пути для рисования, который является динамическим, как второй параметр BitmapFactory.decodeResource().
Я могу предоставить код по запросу.
@МайкМ. Так вы имеете в виду вот такой Bitmap memeCanvas = BitmapFactory.decodeFile(imageUri.getLastPathSegment()).copy(Bitmap.Config.ARGB_8888, true);?
О, нет, если у вас есть Uri. Извините, я думал, вы имеете в виду путь к файлу. Предполагая, что вы получили imageUri обычными методами, вы должны сделать что-то вроде BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)).
@МайкМ. Нет метода для getContentResolver() в decodeStream.
Я не уверен, что вы говорите. Предполагая, что вы находитесь в Context — например, Activity — что кажется вероятным, поскольку вы вызываете getResources() в своем примере с decodeResource(), синтаксис, который я дал выше, абсолютно правильный.
@МайкМ. Я не уверен. Когда я поставил decodeStream(getContentResolver().openInputStream(imageUri)), getContentResolver был красным.
В каком ты классе? То есть, где именно у вас есть этот код?
@МайкМ. Фрагментарно, но я уже решил проблему. Спасибо большое за помощь. Вы можете проверить мое решение ниже.
Это мое решение. Мне пришлось вызвать 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();
}
Метод
decodeResource()предназначен только для доступных для рисования ресурсов. Возможно, вам нужен методdecodeFile()?