2011-06-26 18 views
8

Mam problem z transformacją kolorów w Javie. Uproszczony problem wygląda następująco:Przekształć RGBA z ukrytym kolorem w RGB?

Moja aplikacja zawiera obraz. Na tym obrazku nakreśliłem Przypomnienie. Kolor prostokąta definiuje się jako nowy kolor (255, 255, 0, 80).

Czy możliwe jest obliczenie/przekształcenie koloru wyświetlanego na ekranie na kolor bez wartości alfy bez metody getPixelColor() - metoda? Różne sformułowane: Czy mogę obliczyć kolor bez wartości alfa z koloru o wartości alfa + kolor podstawowy?

Mam nadzieję, że ktoś może mi pomóc.

Pozdrawiam, Michael

+0

Krótka odpowiedź: "Tak". Potencjalnie przydatny odczyt [kompostowanie Alpha] –

Odpowiedz

7

Podobnie jak Wikipedia article państw (zakładając nieprzezroczystego tła):

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); 

Zastrzeżenie: Nie testowałem tego, ale to powinno działać.

Jeśli kolor pierwszego planu jest stały (na przykład wypełniony przezroczysty prostokąt), można zoptymalizować dużo, wstępnie obliczając wartości fgColor.getComponent() * fgColor.getAlpha() i (255 - fgColor.getAlpha()).

+0

Dziękuję bardzo za komentarz i kod. Działa naprawdę dobrze :) – Michael

+0

@Michael: Miło to słyszeć :) –