Подтвердить что ты не робот

Android: загрузка растрового изображения альфа-маски

У меня есть одноканальный PNG файл, который я бы хотел использовать в качестве альфа-маски для операций рисования Porter-Duff. Если я загружу его без каких-либо опций, в результате битмап имеет конфигурацию RGB_565, то есть обрабатывается как оттенки серого. Если я настрою предпочтительную конфигурацию на ALPHA_8, она загрузит ее как оттенок серого ARGB_8888.

Как я могу убедить Android рассматривать этот файл как альфа-маску вместо изображения в градациях серого?

mask1 = BitmapFactory.decodeStream(pngStream);
// mask1.getConfig() is now RGB_565

BitmapFactory.Options maskOpts = new BitmapFactory.Options();
maskOpts.inPreferredConfig = Bitmap.Config.ALPHA_8;
mask2 = BitmapFactory.decodeStream(pngStream, null, maskOpts);
// mask2.getConfig() is now ARGB_8888 (the alpha channel is fully opaque)
4b9b3361

Ответ 1

Больше обходного решения, чем решение:

Теперь я включаю альфа-канал в RGBA PNG файле, а каналы RGB - все нули. Я могу загрузить этот файл с предпочтительной конфигурацией ARGB_8888, а затем извлечь его альфа-канал. Это отнимает несколько килобайт в файле маски и много памяти при декодировании изображения.

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap source = BitmapFactory.decodeStream(pngStream, null, opts);
Bitmap mask = source.extractAlpha();
source.recycle();
// mask.getConfig() is now ALPHA_8