Преобразовать RGBA с базовым цветом в RGB? - PullRequest
8 голосов
/ 26 июня 2011

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

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

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

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

С уважением, Michael

1 Ответ

7 голосов
/ 26 июня 2011

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

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()).

...