Байты JPEG не являются пикселями. JPEG является сжатым (и обычно с потерями) форматом. Непосредственное изменение байтов приведет к повреждению сжатых данных, в результате чего будет получен несовместимый файл, который больше не является допустимым изображением JPEG.
Чтобы преобразовать пиксели изображения в байтовый массив, вам необходимо будет прочитать необработанные данные пикселей из BufferedImage. ,Для этого сначала нужно решить, что будет означать каждое значение байта. Обычный подход заключается в использовании четырех байтов для хранения каждого пикселя: один для красного компонента цвета пикселя, один для зеленого компонента, один для синего компонента и один для альфа-компонента (прозрачности). Обычно это сокращенное обозначение RGBA.
Возможны многие другие конфигурации. Например, если ваше изображение в градациях серого, вы можете просто сохранить значение серого каждого пикселя в одном байте.
Если мы предполагаем первый подход, вы можете использовать метод getRGB BufferedImage для извлечениязначения:
int width = bImage.getWidth();
int height = bImage.getHeight();
byte[] bytes = new byte[width * height * 4];
ByteBuffer buffer = ByteBuffer.wrap(bytes);
IntBuffer intBuffer = buffer.asIntBuffer();
int[] rowPixels = new int[width];
for (int y = 0; y < height; y++) {
bImage.getRGB(0, y, width, 1, rowPixels, 0, width);
intBuffer.put(rowPixels);
}
return bytes;
Вы можете использовать setRGB для преобразования байтов обратно в изображение:
ByteBuffer buffer = ByteBuffer.wrap(data);
IntBuffer intBuffer = buffer.asIntBuffer();
BufferedImage bImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
int[] rowPixels = new int[width];
for (int y = 0; y < height; y++) {
intBuffer.get(rowPixels);
bImage.setRGB(0, y, width, 1, rowPixels, 0, width);
}
Что касается того, как одномерный массив содержит пиксели: формат изображения укажет как. Как правило, каждая строка пикселей находится в массиве сразу после предыдущей строки. Точное число байтов между началом каждой строки в массиве называется шагом сканирования.