2011-04-02 22 views
5

Ok, estoy trabajando en un programa que toma una imagen, aísla un bloque de píxeles en una matriz y luego obtiene cada valor de rgb individual para cada píxel en esa matriz.Convierta un valor rgb int negativo en bruto a un valor rgb de 3 números

Cuando hago esto

//first pic of image 
//just a test 
int pix = myImage.getRGB(0,0) 
System.out.println(pix); 

Escupe -16106634

que necesita para obtener el (R, G, B) el valor de este valor int

¿Existe una fórmula , alg, método?

Respuesta

11

El método BufferedImage.getRGB(int x, int y) siempre devuelve un píxel en el modelo de color TYPE_INT_ARGB. Por lo que sólo tiene que aislar los bits de la derecha para cada color, como este:

int pix = myImage.getRGB(0, 0); 
int r = (pix >> 16) & 0xFF; 
int g = (pix >> 8) & 0xFF; 
int b = pix & 0xFF; 

Si le sucede a querer el componente alfa:

int a = (pix >> 24) & 0xFF; 

Alternativamente, puede utilizar el constructor Color(int rgba, boolean hasalpha) por conveniencia (por lo el costo de rendimiento).

+0

¡Gracias! Funcionó perfectamente –

+0

Cool. Asegúrate de haber copiado los cambios de bits en la dirección correcta ... De hecho, cometí un error tipográfico la primera vez y lo solucioné en una edición. – WhiteFang34

2
int pix = myImage.getRGB(0,0); 
Color c = new Color(pix,true); // true for hasalpha 
int red = c.getRed(); 
int green = c.getGreen(); 
int blue = c.getBlue(); 
Cuestiones relacionadas