Как заменить пиксели с ограничением по альфа-каналу назначения (destination)?

У меня есть много полупрозрачных иконок, которые я хочу рисовать поверх полупрозрачного фона. Рисовать так, чтобы прозрачность всего холста оставалась одинаковой. Для этого я установил правило (Porterduff rule) SRC, которое заменяет пиксели фона на пиксели иконки, но...

...вот засада! Иконки отрисованы на BufferedImage с полностью прозрачным фоном, и он также заменяет пиксели фона. Это значит, что иконки при отрисовке "вырезают" квадрат из фона.

Я заметил, что желаемого эффекта можно достичь при помощи последовательной отрисовки с композитом DST_OUT и SRC_OVER, но менять композит при отрисовке каждой иконки из любого места программы - большой геморрой, снижение производительности и необходимость затратить ещё часов 100 на рефакторинг.

Можно ли сделать такой композит, который рисует только ту часть BufferedImage, которая имеет ненулевую прозрачность?


Ответы (0 шт):