PNG теряет прозрачность в Android (если все его пиксели непрозрачны)

У меня есть приложение с двумя представлениями - одно поверх другого. В верхнем я использую растровое изображение (ARGB_8888), загруженное из ресурса PNG, и я играю с его альфа-каналом, чтобы некоторые его части исчезли, чтобы тот, что ниже, стал видимым. Все работает нормально, если исходное изображение имеет хотя бы один прозрачный пиксель для начала. Но если исходный PNG не имеет прозрачных пикселей, то изменение его альфа на 0 делает пиксель, который я изменил, черным, а не прозрачным.

Любые идеи, что можно сделать, чтобы исправить это? что-то вроде:

aaptOptions {
    cruncherEnabled = false
}

а другой вариант?

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


person Piotr    schedule 10.09.2016    source источник
comment
вы видели этот вопрос stackoverflow.com/questions/2881939/?   -  person Rafal Malek    schedule 16.09.2016
comment
Звучит почти так, как будто ваши изображения были 24-битными, если они не имели прозрачности (32-битные). Таким образом, вы правы в ответе на необходимость преобразовать его в альфу либо при загрузке, как вы, либо при сохранении самого файла как 32-битного.   -  person Roger Garstang    schedule 21.09.2016


Ответы (1)


В порядке. Наконец-то понял.

Пришлось добавить одну строчку. Вместо:

mBitmap = BitmapFactory.decodeResource(getResources(), getResourceID()).copy(Bitmap.Config.ARGB_8888, true);

Я сейчас использую:

mBitmap = BitmapFactory.decodeResource(getResources(), getResourceID()).copy(Bitmap.Config.ARGB_8888, true);
mBitmap.setHasAlpha(true);

и нет необходимости добавлять прозрачный пиксель на исходное изображение!

person Piotr    schedule 16.09.2016