各 RGB 値の最下位ビットを取得してピクセル配列を作成するカラー配列 (ご参考までに bmp ファイルから読み取ったもの) があります。
次に、その配列を取得して、8 つの要素の各セットから文字を作成し、それを message という文字列に追加します。
ここのどこかでコードが誤動作し、期待どおりの出力が得られません。基本的にすべてのピクセルを印刷するため、残念ながら出力を提供できません。
説明が必要な場合は教えてください。
// extracts a message hidden in a BMP file
public String extractMessage()
{
int iter = 0;
// read the lsbs of the rgb values into one array
char[] pixels = new char[bmpHeight * bmpWidth * 3];
for(Color[] cRow: image)
for(Color c: cRow)
{
pixels[iter++] = c.getRed() & 1; // make zero or one
pixels[iter++] = c.getGreen() & 1;
pixels[iter++] = c.getBlue() & 1;
}
// iterate through the pixels and move the lsbs into the correct place value
String message = "";
int i = 0;
while(i < pixels.length - pixels.length % 8)
{
char c = (char)0;
c += pixels[i++] << 7; // 1
c += pixels[i++] << 6; // 2
c += pixels[i++] << 5; // 3
c += pixels[i++] << 4; // 4
c += pixels[i++] << 3; // 5
c += pixels[i++] << 2; // 6
c += pixels[i++] << 1; // 7
c += pixels[i++]; // 8
message += c;
}
return message;
}
更新: これは、16 進エディターのサンプル ファイル 3x2.bmp です。文字「c」を隠そうとしました。http://imgur.com/a/ZHYiq