gpt4 book ai didi

java - 如何根据我的消息更改每个像素的 LSB

转载 作者:太空宇宙 更新时间:2023-11-04 14:03:54 25 4
gpt4 key购买 nike

我正在尝试实现一个简单的编码程序,可以在图像像素的 LSB 中隐藏消息。到目前为止,我已经从消息中获取了字节数组

    private static byte[] ConvertMessageToByte(String message,
byte[] messageBytes) {
// takes in the message and stores them into bytes
// returns message byte array
byte[] messageByteArray = message.getBytes();

return messageByteArray;

}

我还获得了我想要编码的相应图像的字节数组

    private static byte[] getPixelByteArray(BufferedImage bufferedImage) {

WritableRaster raster = bufferedImage.getRaster();

DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();

return buffer.getData();

}

到目前为止,我还不太明白接下来的步骤。我是否迭代图像字节数组并将每个 ARGB 值存储在另一个字节数组中?另外,我如何将消息位值应用于像素?

最佳答案

private static byte[] ConvertMessageToByte(String message, byte[] messageBytes) {
byte[] messageByteArray = message.getBytes();
return messageByteArray;
}

关于此方法:convertMessageToBytes 是一个更好的名称,因为小写首字母更传统,而且您正在生成一个由多个字节组成的数组,而不仅仅是一个字节。此方法不需要第二个 byte[] 参数,因为它可以简化为 return message.getBytes(); 并产生相同的效果。此外,String.getBytes() 通常在 this 的父函数中调用,因为它不被广泛认为值得换行(因为它是一行)。结论:删除此方法并在主代码中使用 byte[] ba = s.getBytes();

就我个人而言,我将图像处理为 3_BYTE_RGB,因为这是人们最常想到的方式,而且实际上,它们在物理显示器或打印机上表示并以多种图像格式存储。 HSL (LSB) 通常是颜色的用户端表示。您应该考虑 RGB 而不是 HSL。

不要将图像作为byte[]处理,而是使用int BufferedImage.getRGB(int x, int y),因为它更容易实现并且更容易访问。下面的函数可能有用。我会让你写相反的。

private static int[] getColourAt(BufferedImage image, int x, int, y) {
int rgb = image.getRGB(x, y);
int r = rgb >> 16;
int g = (rgb >> 8) % 256;
int b = rgb % 256;
return new int[] {r, g, b};
}

从那里,您应该循环遍历每个像素并根据需要进行调整。

关于java - 如何根据我的消息更改每个像素的 LSB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29055817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com