Безопасно ли перерабатывать растровое изображение после его использования для создания масштабированной версии?

Я создаю растровое изображение, но после этого я создаю еще одно с масштабом:

Bitmap originalBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.a1);
float ratio = (float) originalBitmap.getWidth() / originalBitmap.getHeight();
int h = sh/7;
int w = (int) (h * ratio);
scaledBitmap = Bitmap.createScaledBitmap(originalBitmap, w, h, true);
originalBitmap.recycle();

Безопасно ли перерабатывать originalBitmap после создания масштабированного растрового изображения? Исходное растровое изображение не будет использоваться, будет использоваться только масштабированное растровое изображение.

Я спрашиваю об этом, потому что в этой строке у меня был комментарий, в котором рассказывается о прошлых сбоях «Recycled Bitmap», но я не знаю, при каких обстоятельствах. Может быть, переработка исходного может привести к сбоям в масштабированной версии?


person NullPointerException    schedule 22.10.2019    source источник
comment
Я не думаю, что должны возникнуть проблемы с его переработкой, но я давно не занимался масштабированием растрового изображения вручную.   -  person Martin Marconcini    schedule 22.10.2019
comment
@MartinMarconcini, а как ты тогда это сделал?   -  person NullPointerException    schedule 22.10.2019
comment
Учитывая, что мы находимся в октябре 2019 года, а в последний раз мне приходилось вручную декодировать такое растровое изображение в 2014 году, я не помню. Но в целом то, что я там вижу, нормально, вроде правильно делаете. Причина, по которой это может дать сбой — по крайней мере тогда — заключается в том, что фреймворк createScaledBitmap ссылается на ваш originalBitmap даже после его создания, но я был бы удивлен, если бы это было так. Тем не менее, я бы порекомендовал вам подождать кого-то с более свежим опытом работы с Bitmap, чтобы убедиться, что я не говорю что-то неправильное (что не будет в первый раз).   -  person Martin Marconcini    schedule 22.10.2019


Ответы (1)


Документы для Android:

public static Bitmap createScaledBitmap ( Bitmap src, int dstWidth, int dstHeight, boolean filter )

Создает новое растровое изображение, масштабированное из существующего растрового изображения, когда это возможно. Если указанные ширина и высота совпадают с текущей шириной и высотой исходного растрового изображения, исходное растровое изображение возвращается, а новое растровое изображение не создается.

Поэтому просто убедитесь, что размеры вашего масштабированного растрового изображения отличаются от исходного растрового изображения.

person Rishabh Dhawan    schedule 23.10.2019