Преобразовать RGBA с основным цветом в RGB?

у меня проблема с преобразованием цветов в Java. Упрощенная задача выглядит следующим образом:

Мое приложение содержит изображение. Я наложил прямоугольник поверх этого изображения. Цвет прямоугольника определяется как новый цвет (255, 255, 0, 80).

Можно ли вычислить/преобразовать цвет, отображаемый на экране, в цвет без альфа-значения без метода getPixelColor()? Другая формулировка: могу ли я вычислить цвет без альфа-значения из цвета с альфа-значением + базовый цвет?

Я надеюсь, что кто-то может мне помочь.

С уважением, Майкл


person Michael    schedule 26.06.2011    source источник
comment
Краткий ответ: Да. Потенциально полезное чтение Альфа-компостирование   -  person    schedule 26.06.2011


Ответы (1)


Как говорится в статье Википедии (при условии непрозрачного фона):

int r, g, b;
r = fgColor.getRed() * fgColor.getAlpha() + bgColor.getRed() * (255 - fgColor.getAlpha());
g = fgColor.getGreen() * fgColor.getAlpha() + bgColor.getGreen() * (255 - fgColor.getAlpha());
b = fgColor.getBlue() * fgColor.getAlpha() + bgColor.getBlue() * (255 - fgColor.getAlpha());
Color result = new Color(r / 255, g / 255, b / 255);

Отказ от ответственности: не проверял это, но это должно работать.

Если цвет переднего плана постоянный (например, закрашенный прозрачный прямоугольник), вы можете многое оптимизировать, предварительно вычислив fgColor.getComponent() * fgColor.getAlpha() и (255 - fgColor.getAlpha()).

person Karel Petranek    schedule 26.06.2011
comment
Большое спасибо за комментарий и код. Это работает очень хорошо :) - person Michael; 26.06.2011
comment
@Майкл: Рад это слышать :) - person Karel Petranek; 27.06.2011