2011-06-26 7 views
8

J'ai un problème avec la transformation des couleurs en Java. Le problème simplifié ressemble à ceci:Transformer RGBA avec la couleur sous-jacente en RGB?

Mon application contient une image. J'ai posé un recangle sur cette image. La couleur du rectangle est définie en tant que nouvelle couleur (255, 255, 0, 80).

Est-il possible de calculer/transformer la couleur affichée à l'écran en une couleur sans valeur alpha sans la méthode getPixelColor()? Formulé différemment: Puis-je calculer une couleur sans valeur alpha à partir d'une couleur avec valeur alpha + la couleur sous-jacente?

J'espère que quelqu'un peut m'aider.

Cordialement, Michael

+0

Réponse courte: "Oui". Une lecture potentiellement utile [Alpha composting] (http://en.wikipedia.org/wiki/Alpha_compositing) –

Répondre

7

Tout comme les Wikipedia article états (en présumant fond opaque):

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

Avertissement: n'ont pas testé cela, mais il devrait fonctionner. Si la couleur de premier plan est constante (comme un rectangle transparent rempli), vous pouvez optimiser un lot en précalculant fgColor.getComponent() * fgColor.getAlpha() et (255 - fgColor.getAlpha()).

+0

Merci beaucoup pour le commentaire et le code. Ca marche très bien :) – Michael

+0

@Michael: Content d'entendre ça :) –

Questions connexes