我有一个颜色数组(从 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