2016-04-03 3 views
-2

Как преобразовать массив байтов в PNG-изображение (а не как JPEG)? Я столкнулся с этим при кодировании стеганографии. Я немного разбираюсь в том, что он требует преобразования в BufferedImage между ними. Пожалуйста помоги.Преобразование массива байтов в png изображение

+0

ли ваш байт в оттенках серого или RGB24? – Nayuki

+0

На каком языке вы работаете? Java имеет хорошее преобразование изображения файлов и записи библиотек. –

+0

Уточняете ли вы, что вы работаете с Java? Вы упомянули BufferedImage. И вы действительно искали массив байтов в BufferedImage? Я был бы удивлен, если бы не получил никаких результатов. https://stackoverflow.com/questions/12705385/how-to-convert-a-byte-to-a-bufferedimage-in-java – Reti43

ответ

0

Предположим, у вас есть массив байтов с длиной = (ширина изображения * высота изображения * 3). Во-первых, мы упаковать данные в BufferedImage:

import java.awt.BufferedImage; 
byte[] b = (...); 
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
for (int y = 0; y < height; y++) { 
    for (int x = 0; x < width; x++) { 
     int off = (y * width + x) * 3; 
     int pix = (b[off] & 0xFF) << 16; // Red component 
     pix |= (b[off + 1] & 0xFF) << 8; // Green component 
     pix |= (b[off + 2] & 0xFF) << 0; // Blue component 
     img.setRGB(x, y, pix); 
    } 
} 

А потом записать файл в формате PNG:

import javax.imageio.ImageIO; 
ImageIO.write(img, "png", new File("output.png")); 
+0

Я пробовал ваш код, но он не останавливается. Все данные, которые у меня есть: размер моего массива байтов: 1316890 и width = 1024 и height = 768. Изображение, которое я использовал, - http://vignette3.wikia.nocookie.net/pokemon/images/b/b4/ Pokemon_Anime.png/revision/latest? Cb = 20110118234235 –

+0

Мои петли заканчиваются правильно. Что ты имеешь ввиду, это не останавливается? Пожалуйста, дайте мне информацию о том, какой код вы используете и какое поведение вы наблюдаете. – Nayuki

+0

Теперь я немного исправил свой код, и я получаю исключение «ArrayIndexOutOfBound». Ширина и высота, полученные из BufferedImage исходного изображения, равны соответственно 1024 и 768, и когда я преобразовал массив BufferedImage в байты, размер массива равен 1316890. Теперь я хочу преобразовать массив байтов обратно в png-изображение. При использовании вашего кода я получаю исключение, как упоминалось выше. –

Смежные вопросы