Я попытался прочитать этот абзац с сайта, но я не понимаю, почему «32-й пиксель хранит бит, необходимый для восстановления значения байта, необходимого для создания исходной строки».Хранение сообщения в картинке
Это пытается поместить сообщение в альфа (прозрачность) (ARGB)
В этом коде ниже, почему нужно вставлять как целое число и байт
int imageWidth = img.getWidth(), imageHeight = img.getHeight(),
imageSize = imageWidth * imageHeight;
if(messageLength * 8 + 32 > imageSize) {
JOptionPane.showMessageDialog(this, "Message is too long for the chosen image",
"Message too long!", JOptionPane.ERROR_MESSAGE);
return;
}
embedInteger(img, messageLength, 0, 0);
byte b[] = mess.getBytes();
for(int i=0; i<b.length; i++)
embedByte(img, b[i], i*8+32, 0);
}
private void embedInteger(BufferedImage img, int n, int start, int storageBit) {
int maxX = img.getWidth(), maxY = img.getHeight(),
startX = start/maxY, startY = start - startX*maxY, count=0;
for(int i=startX; i<maxX && count<32; i++) {
for(int j=startY; j<maxY && count<32; j++) {
int rgb = img.getRGB(i, j), bit = getBitValue(n, count);
rgb = setBitValue(rgb, storageBit, bit);
img.setRGB(i, j, rgb);
count++;
}
}
}
private void embedByte(BufferedImage img, byte b, int start, int storageBit) {
int maxX = img.getWidth(), maxY = img.getHeight(),
startX = start/maxY, startY = start - startX*maxY, count=0;
for(int i=startX; i<maxX && count<8; i++) {
for(int j=startY; j<maxY && count<8; j++) {
int rgb = img.getRGB(i, j), bit = getBitValue(b, count);
rgb = setBitValue(rgb, storageBit, bit);
img.setRGB(i, j, rgb);
count++;
}
}
}
Благодарим за ответ, embedInteger - это дело с вложением длины сообщения в первые 32 пикселя? но как насчет embedByte ?? –
Я уточнил ответ для лучшего уточнения. – Reti43
Извините, это может быть глупый вопрос, зачем нужен embedInteger, поскольку мы могли просто вставлять сообщения один за другим с помощью embedByte. Он может вставлять только один бит на пиксель? –