0

各 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

4

0 に答える 0