Странные символы Ascii при выводе декодированного закодированного изображения Java
Я пишу программу для шифрования изображений, в которой я кодирую строку внутри изображения.
Я работаю с .png
изображений.
Кодирование выполняется следующими шагами:
- Пиксели изображения сохраняются в двумерном массиве с помощью getRGB().
- Каждый символ в строке преобразуется в двоичную форму и сохраняется в массиве.
- LSB каждого байта
4byte
пиксель изменяется в соответствии с каждым битом двоичной формы символа. LSB первого байта находится в 0-й позиции, LSB второго байта находится в 8-й позиции, третий байт находится в 16-й позиции, а четвертый байт находится в 24-й позиции. - После кодирования измененные пиксели записываются в исходное изображение с помощью метода setRGB().
Для декодирования:
- Прочитайте пиксели изображения, используя getRGB();
- Обратный метод кодирования применяется для получения данных.
После каждого 8-го бита int, содержащий декодированные биты, преобразуется в символ. Затем инициализируется с нуля для другого символа.
if((pixels[i][j] & change)==1) { tempText|=1 ; } tempText<<=1;
Где изменение составляет 1,256,65536,16777216 в зависимости от итерации. Чьи 0-й,8-й, 16-й и 24-й биты являются одним.
Код компилируется нормально. Но после декодирования я получаю странные символы ascii на выходе. Я не мог найти причину для этого. Поэтому я консультируюсь с экспертами здесь.
1 ответ
(это слишком долго для комментария)
Вы написали:
int change = 0;
for(int k=0;k<4;k++)
{
if(k==0)
{
change=1;
}
else
if(k==1)
{
change=256;
}
else
if(k==2)
{
change=65536;
}
else
if(k==3)
{
change = 16777216;
}
И там много повторений. Обычно компьютеры очень хороши в устранении повторений.
Это может быть переписано, если я не ошибаюсь этим одним вкладышем:
final int change = 1 << 8 * k;