Não chega. Você perdeu informação, ao fazer x & 0xFF0000.
Basta ver o que ocorreu em hexadecimal:
x recebeu -8875214 (que em hexadecimal é 0xFFF27526)
Ao fazer x & 0xFF0000 você obteve o resultado 0x00F20000
Aí você deslocou 2 bytes para a direita, tendo o resultado 0xF2.
Você não consegue voltar para trás, mesmo deslocando 2 bytes para a esquerda (você perdeu os bytes 75 e 26).
ViniGodoy
Você consegue se tiver separado as cores nos seus 3 componentes. E ainda tiver os 3 componentes.
Por exemplo:
int cor = -8875214;
int r = ((cor & 0xff0000) >> 16);
int g = ((cor & 0x00FF00) >> 8);
int b = ((cor & 0x0000FF);
Para restaurar a cor com base no R, G e B:
intcorRestaurada=(r<<16)|(g<<8)|b;
Na sua expressão original, o 120 só referia ao componente vermelho. O 0xFF0000 zera os componentes verdes e azul. Sem guardar isso em algum momento, é a tal informação perdida que o entanglement citou.
luistiagos
sim mas par grayscale como fica?
E
entanglement
Para você converter uma cor para uma escala de cinza, você precisa achar uma fórmula que combine os componentes R, G e B para achar um número de 0 até 255, que será repetido nos três componentes.
Descontando o blábláblá, isso quer dizer, mais ou menos, que você deve multiplicar R por 0,3, G por 0,59 e B por 0,11 para obter o valor do tom de cinza.
Obviamente essa é uma conversão irreversível (você não pode, a partir de um tom de cinza, dizer que aquilo era azul ou roxo ou marrom ou vermelho )