2009-10-21 11 views
11

Estoy leyendo el color del píxel en un BufferedImage de la siguiente manera:Como lee el color del píxel en un BufferedImage java con la transparencia

..... 
InputStream is = new BufferedInputStream(conn.getInputStream()); 
BufferedImage image = ImageIO.read(is); 

int color = image.getRGB(x, y); 

int red = (colour & 0x00ff0000) >> 16; 
int green = (colour & 0x0000ff00) >> 8; 
int blue = colour & 0x000000ff; 

Ahora bien, esto funciona bien, salvo del png con transparencia. Encuentro que si x, y se refiere a un píxel transparente sin color, todavía leo un color, generalmente del mismo color que el utilizado en cualquier otro lugar de la imagen.

¿Cómo puedo detectar que el píxel es realmente transparente y no está coloreado?

Gracias

Respuesta

17
int alpha = (colour>>24) & 0xff; 

El resultado es también un valor que va de 0 (completamente transparente) a 255 (completamente opaco).

+0

Tenga en cuenta que si alfa es 0 (transparente), entonces los valores de color realmente no importan. Probablemente un paso de optimización en algunos editores para no molestarse en establecer valores de color cuando alfa es 0. – basszero

+0

genial - gracias por eso, muy útil –

+1

gracias - Me sorprende que la clase BufferedImage no tenga un método "int getTransparency (int x , int y); " – greenimpala

Cuestiones relacionadas