Есть много ловушек, когда дело доходит до обработки растровых изображений вручную. Я бы действительно советовал не катать свои собственные для общего пользования.
Библиотека, которую Google рекомендует для обработки изображений, - Glide. Он поставляется с удобным классом, специально предназначенным для отображения представлений изображений в виджетах приложений: AppWidgetTarget.
AppWidgetTarget awt = new AppWidgetTarget(context, R.id.img_dog, remoteViews, appWidgetIds) {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
super.onResourceReady(resource, transition);
}
};
RequestOptions options = new RequestOptions().
override(300, 300).placeholder(R.drawable.placeholder_img).error(R.drawable.error_img)
Glide.with(context.getApplicationContext())
.asBitmap()
.load(imageUrl)
.apply(options)
.into(awt);
В Gradle необходимо добавить следующие строки:
implementation 'com.github.bumptech.glide:glide:4.7.1'
kapt 'com.github.bumptech.glide:compiler:4.7.1'
Образцы скольжения и источник
Учебник по скольжению
Но, что касается исключения, этот пост объясняет некоторые ошибки при работе с растровыми изображениями:
Странно нехватка памяти при загрузке изображения в растровый объект
С Glide можно изменять размеры изображений с помощью функции override (), показанной выше.
Также 2 близких звонка:
bis.close();
is.close();
Нужно поместить в блок наконец. Каждый раз, когда close () вызывается в операторе try, будь то поток, курсор или другой ресурс, это должен быть потенциальный красный флаг. Почти всегда лучше позиционировать их в конечном итоге.
Закрытие потоков ввода / вывода при уничтожении