A cor é formada por 3 bytes (ou 4, caso tenha canal alfa).
Esses bytes são gravados numa variável do tipo int, e a classe de imagem usa geralmente o formato A[color=red]R[/color][color=green]G[/color][color=blue]B[/color] para representa-la.
Como vc sabe, um inteiro possui 4 bytes.
Então, uma cor com 255 (0xFF) no alfa, e 50 (0x32) no vermelho, 30 (1E) no verde e 10 (0A) no azul, será representada assim:
0xFF[color=red]32[/color][color=green]1E[/color][color=blue]0A[/color]
Ou, em binário:
1111 1111 [color=red]0011 0010[/color] [color=green]0001 1110[/color] [color=blue]0000 1010[/color]
Se a variável fosse long, isso seria o número 4281474570. Como o java não tem sinal, aquele primeiro bit é interpretado como um bit de sinal, e os demais como o valor do número. Como o valor do primeiro bit é 1, indica que o número é negativo, e portanto, o número todo, com os mesmos bits será exibido como: -13492725.
O ideal, para trabalhar com esse número, é aplicar máscaras de bits e utilizar cada byte da cor separadamente. Por exemplo, para extrair o canal vermelho da imagem, no padrão ARGB, você faria:
int mascaraVermelho = 0x00FF0000;
int bytesVermelhos = (corPixel & mascaraVermelho) >> 16;
System.out.println(bytesVermelhos); //Imprime 50.
A classe Color faz esse tipo de operação automaticamente.
Leia também esses tutoriais do Ponto V, pois vão te ajudar:
http://www.pontov.com.br/site/index.php/arquitetura/51-programacao/186-imagens-digitais
http://www.pontov.com.br/site/index.php/opengl/182-cores