2011-06-26 15 views
8

Tengo un problema con la transformación de colores en Java. El problema simplificado se parece a lo siguiente:¿Transforma RGBA con color subyacente en RGB?

Mi aplicación contiene una imagen. He puesto un Recangle sobre esta imagen. El color del Rectángulo se define como Color nuevo (255, 255, 0, 80).

¿Es posible calcular/transformar el color que se muestra en la pantalla en un color sin alfa-Valor sin la getPixelColor() - Método? Formulado diferente: ¿Puedo calcular un Color sin valor alfa de un Color con valor alfa + el color subyacente?

Espero que alguien me pueda ayudar.

Saludos, Michael

+0

Respuesta corta: "Sí". Una lectura potencialmente útil [Alpha composting] (http://en.wikipedia.org/wiki/Alpha_compositing) –

Respuesta

7

Al igual que los estados Wikipedia article (suponiendo fondo opaco):

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

Negación: no han probado esto, pero debería funcionar.

Si el color de primer plano es constante (como un rectángulo transparente lleno), puede optimizar un montón precomputando fgColor.getComponent() * fgColor.getAlpha() y (255 - fgColor.getAlpha()).

+0

Muchas gracias por el comentario y el código. Funciona realmente bien :) – Michael

+0

@Michael: Me alegra oír eso :) –

Cuestiones relacionadas