Para fazer o programa, você não converte nada em Strings. Você precisa trabalhar com operadores bitwise. E tratar as variáveis inteiras como se fossem bits.
Por exemplo, imagine que você tem uma cor, lida da imagem original, definida por:
int r = 248;
int g = 248;
int b = 255;
int a = 255;
Cada número desses tem uma representação binária (use a calculadora do Windows para descobri-la, se quiser):
248 = 1111 1000
255 = 1111 1111
Agora, você pode usar aqueles operadores. Vamos usar o afastamento de bits, por exemplo, para zerar os dois últimos dígitos:
b = (b >> 2); //Afasta 2 bits para direita. b agora fica com 0011 1111
b = (b << 2); //Volta pro lugar. b fica com 1111 1100
Agora, considere a letra K. O valor dela é 75, em binário, pela calculadora, dá: 01001001
Vamos supor que você queira colocar os dois bits descatados em negrito em B. Você faria:
int bits = 'K'; //01001001
bits >> 2; //00010010
bits = bits & 3;
veja a última operação em detalhes (o & é um "e" bit a bit):
00010010 &
00000011
00000010
Agora. Falta combinar bits com B:
Isso é um ou bit-a-bit. Veja em detalhes:
1111 1100 |
0000 0010
1111 1110
Entendeu? E por aí você vai trabalhando. 