Android: загрузка альфа-маски - PullRequest
13 голосов
/ 28 октября 2010

У меня есть одноканальный файл PNG, который я хотел бы использовать в качестве альфа-маски для операций рисования Портера-Даффа. Если я загружаю его без каких-либо опций, результирующее растровое изображение имеет конфигурацию 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)

1 Ответ

7 голосов
/ 29 октября 2010

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

Теперь я включаю альфа-канал в PNG-файл RGBA, в котором каналы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...