Как заменить пиксели с ограничением по альфа-каналу назначения (destination)?
У меня есть много полупрозрачных иконок, которые я хочу рисовать поверх полупрозрачного фона. Рисовать так, чтобы прозрачность всего холста оставалась одинаковой. Для этого я установил правило (Porterduff rule) SRC, которое заменяет пиксели фона на пиксели иконки, но...
...вот засада! Иконки отрисованы на BufferedImage
с полностью прозрачным фоном, и он также заменяет пиксели фона. Это значит, что иконки при отрисовке "вырезают" квадрат из фона.
Я заметил, что желаемого эффекта можно достичь при помощи последовательной отрисовки с композитом DST_OUT и SRC_OVER, но менять композит при отрисовке каждой иконки из любого места программы - большой геморрой, снижение производительности и необходимость затратить ещё часов 100 на рефакторинг.
Можно ли сделать такой композит, который рисует только ту часть BufferedImage, которая имеет ненулевую прозрачность?