Объедините несколько изображений в одно изображение для последующего рисования с альфа-смешением - PullRequest
3 голосов
/ 03 августа 2009

У меня есть графическая система для Java, которая позволяет объектам «оборачиваться», указав несколько изображений, к которым могут применяться (относительно) сложные параметры выравнивания и изменения размера.

Для адекватной работы (особенно на устройствах с очень низким энергопотреблением) я выполняю рисование изображения на внутреннем изображении, когда обои сначала окрашиваются, а затем копирую это составное изображение в целевой графический контекст, чтобы передать его на экран. Затем составная часть воссоздается, только если размер объекта изменяется, поэтому единственной работой для последующих перерисовок является копирование обрезанной области из составной части в целевой графический контекст.

Решение работает очень хорошо, за исключением того, что когда у меня есть PNG-изображения с прозрачностью альфа-канала, альфа-канал теряется при рисовании композита, то есть в композите все пиксели полностью непрозрачны. Поэтому последующее копирование в экранный графический контекст не позволяет просвечивать то, что скрыто за обоями.

Мне удалось использовать RGBImageFilter, чтобы отфильтровать полностью прозрачные пиксели, но я не вижу решения с этим, чтобы заставить смешанную прозрачность работать.

Кто-нибудь знает, как я могу рисовать изображения с неповрежденным альфа-каналом и комбинировать их, если два пикселя с альфа-значениями перекрываются?

1 Ответ

3 голосов
/ 03 августа 2009

Какой тип изображения вы используете для составного изображения?

Вы должны использовать BufferedImage и установить его тип в TYPE_INT_ARGB, который позволяет прозрачность.

...