Comece entendendo o princípio. Veja o post que eu fiz:
Mais legal é fazer esteganografia.
Ao invés de transformar cada letra numa cor, pegue uma imagem já pronta e limpe apenas os dois bits menos significativos de cada componente de cor (incluindo o alfa) e substitua-os pelos bits da letra.
Assim você terá uma imagem praticamente idêntica a original, mas com um texto escondido nela.
Por exemplo, vamos supor que você tenha a letra A, que representa o código 65, isso em binário é:
01[color=red"]00[/color][color=“green”]00[/color][color=“blue”]01[/color]
E sua primeira cor é 248, 248, 255, 255, ou seja, em binário:
11111000 11111000 11111111 11111111
Limpe os dois bits menos significativos:
11111000 11111000 11111100 11111100
E substitua pelos da letra:
11111001 111110[color=“red”]00[/color] 111111[color=“green”]00[/color] 111111[color=“blue”]01[/color]
Assim cada pixel “esconde” uma letra.
Se quiser gerar com mais fidelidade, você pode usar 2 pixels (8 bytes) para representar uma única letra (1 byte), apenas aproveitando o último bit de cada canal de cor.
Que explica como o princípio funciona. Como a codificação é LSB (least significant bit) é exatamente o processo que descrevi.
Se a imagem for em escala de cinza, provavelmente você terá que juntar o último bit de 8 pixels para compor 1 único byte. Se for colorida, terá que juntar 3 pixels (já que cada pixel tem 3 bytes, R, G e B). É o mesmo processo que fiz no meu programa - embora lá eu tenha usado mais de 1 bit por canal de cor.
É lógico que o meu programa não vai resolver seu problema de cara, pois o método que utilizo pode ser um pouco diferente. Mas ali já está a base para você entender como manipular imagem e isolar o bit que quiser para compor outro byte.