0

我有一个颜色数组(从 bmp 文件中读取,以防您想知道),我取每个 RGB 值的最低有效位并创建一个像素数组。

然后我取出该数组并从每组 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;
}

更新:这是十六进制编辑器中的示例文件 3x2.bmp。我试图隐藏字母“c”。http://imgur.com/a/ZHYiq

4

0 回答 0