2010-12-05 33 views
5

que obtener el color del píxel porconvertir int color a int componentes

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

entonces yo quiero adquirir,, componentes rojo verde por separado. ¿Como hacer eso? Tal vez usando alguna máscara de bits?

int green = color&0x00ff00; 

aparentemente no funciona ... :(

Respuesta

3

que se olvidó de cambiar el byte a la derecha:

int green = (color & 0x00ff00) >> 8; 
+0

¡Y asegúrese de cambiar dos bytes a la derecha para rojo! – ClosureCowboy

+0

una cosa más. ¿0x00ff es igual a 0x00ff00? – Kamil

+0

Como dice [javadoc] (http://download.oracle.com/javase/6/docs/api/java/awt/image/BufferedImage.html#getRGB%28int,%20int%29), 'getRGB' return rgba, y no rgb ... – khachik

2

Puede utilizar Color constructor y pasar el entero dado y hasalpha=true:

Color color = new Color(image.getRGB(x,y), true); 

getRGB devuelve el color de ty pe TYPE_INT_ARGB lo que significa que tiene un canal alfa.

+0

Me gustaría evitar crear el siguiente objeto :-) ¡Por cierto, gracias! – Kamil

+0

Entonces, ¿no podemos de alguna manera ignorar alfa? y hacer lógica Y y cambiar? – Kamil

+0

Creo que puedes. Simplemente lea los javadocs para asegurarse de que conoce el orden correcto de bytes de rgb: (rojo, verde, azul, alfa) o (alfa rojo, verde, azul). Y luego haz lo que codymanix sugirió. Sin embargo, no estoy seguro de que la lógica/shift sea de arquitectura cruzada en este caso. – khachik

26

Para obtener componentes de color que puede utilizar:

import android.graphics.Color; 

     int r = Color.red(intColor); 
     int g = Color.green(intColor); 
     int b = Color.blue(intColor); 
     int a = Color.alpha(intColor); 
4
int value = image.getRGB(x,y); 
R = (byte)(value & 0x000000FF); 
G = (byte)((value & 0x0000FF00) >> 8); 
B = (byte)((value & 0x00FF0000) >> 16); 
A = (byte)((value & 0xFF000000) >> 24); 

posible que tenga que darle la vuelta al R, A, B o alrededor.