Преобразовать байтовый массив (byte []) в изображение в Java - PullRequest
5 голосов
/ 19 августа 2011

У меня есть byte[], который я хочу преобразовать в изображение и отобразить изображение в метке.Байт [] имеет формат JPEG 2000.Я пробовал приведенный ниже код, но он возвращает ноль:

InputStream in = new ByteArrayInputStream(bytearray);
BufferedImage image = ImageIO.read(in);

Значение изображения возвращается как null.

Я хочу иметь возможность отображать изображение в метке, как показано ниже:

jLabel.setIcon(new ImageIcon(image));

Спасибо

Ответы [ 3 ]

10 голосов
/ 01 октября 2012

Чтобы преобразовать массив байтов, т.е. byte[] в Image, используйте getImage(). Вероятно, самый простой способ сделать это - создать экземпляр ImageIcon с помощью конструктора ImageIcon(byte[]), а затем вызвать getImage(). Это показано в методе ниже, в частности, в последней строке:

public Image createImage(){
   //ccurve.png
   byte[] b = {-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82,
      0, 0, 0, 15, 0, 0, 0, 15, 8, 6, 0, 0, 0, 59, -42, -107,
      74, 0, 0, 0, 64, 73, 68, 65, 84, 120, -38, 99, 96, -64, 14, -2,
      99, -63, 68, 1, 100, -59, -1, -79, -120, 17, -44, -8, 31, -121, 28, 81,
      26, -1, -29, 113, 13, 78, -51, 100, -125, -1, -108, 24, 64, 86, -24, -30,
      11, 101, -6, -37, 76, -106, -97, 25, 104, 17, 96, -76, 77, 97, 20, -89,
      109, -110, 114, 21, 0, -82, -127, 56, -56, 56, 76, -17, -42, 0, 0, 0,
      0, 73, 69, 78, 68, -82, 66, 96, -126};
   return new ImageIcon(b).getImage();
}

Я думаю, что это можно использовать для png, gif, bmp и jpg изображений. Также байтовый массив не должен быть жестко запрограммирован, как в этом примере.

Если вы хотите ImageIcon вместо Image, не звоните getImage():

public ImageIcon createImageIcon(){
   //ccurve.png
   byte[] b = {-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82,
      0, 0, 0, 15, 0, 0, 0, 15, 8, 6, 0, 0, 0, 59, -42, -107,
      74, 0, 0, 0, 64, 73, 68, 65, 84, 120, -38, 99, 96, -64, 14, -2,
      99, -63, 68, 1, 100, -59, -1, -79, -120, 17, -44, -8, 31, -121, 28, 81,
      26, -1, -29, 113, 13, 78, -51, 100, -125, -1, -108, 24, 64, 86, -24, -30,
      11, 101, -6, -37, 76, -106, -97, 25, 104, 17, 96, -76, 77, 97, 20, -89,
      109, -110, 114, 21, 0, -82, -127, 56, -56, 56, 76, -17, -42, 0, 0, 0,
      0, 73, 69, 78, 68, -82, 66, 96, -126};
   return new ImageIcon(b);
}

Тогда вы можете позвонить jlabel.setIcon(createIconImage());.

3 голосов
/ 19 августа 2011

Использование Java Advanced Imaging для обработки изображений JPEG2000.

Аналогичный вопрос: чтение файлов jpeg2000 в java

0 голосов
/ 19 августа 2011
ServletOutputStream out = response.getOutputStream();
out.write(user.getBytes());

Выше показано, как это работало для меня в прошлом, когда у пользователя есть изображение профиля, просто сохраненное в байтовом массиве. Сервлет понимает это и выводит изображение.

...