Convertir matriz de bytes (byte[]) a la Imagen en Java

Tengo un byte[] que quiero convertir a una Imagen y mostrar la imagen en una etiqueta.
El byte[] es de un formato jpeg 2000.
He probado el código de abajo, pero devuelve null:

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

El valor que tiene la imagen vuelve como null.

Quiero ser capaz de visualizar la imagen en una etiqueta como la siguiente:

jLabel.setIcon(new ImageIcon(image));

Gracias

Posibles duplicados de stackoverflow.com/questions/2662916/read-jpeg2000-files-in-java
Mi conjetura es que los datos de entrada es incorrecta. Por favor, mostrar cómo se han obtenido los datos.
Echa un vistazo aquí: stackoverflow.com/questions/1212882/…

OriginalEl autor crocky | 2011-08-19

3 Kommentare

  1. 10

    Para convertir una matriz de bytes, es decir, byte[] en un Image, uso getImage(). Probablemente la forma más fácil de hacer esto es crear una instancia de un ImageIcon el uso de la ImageIcon(byte[]) constructor y, a continuación, llamar a getImage(). Esto se ilustra en el siguiente método, particularmente en la última línea:

    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();
    }

    Creo que esto puede ser utilizado para png, gif, bmp, y jpg imágenes. También la matriz de bytes no tiene que ser rígida, como en este ejemplo.

    Si quieres un ImageIcon en lugar de un Image, no llame a 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);
    }

    A continuación, puede llamar a jlabel.setIcon(createIconImage());.

    OriginalEl autor ctype.h

  2. 0
    ServletOutputStream out = response.getOutputStream();
    out.write(user.getBytes());

    Lo anterior es cómo su trabajado para mí en el pasado donde el usuario tiene una imagen de perfil, simplemente se almacenan en una matriz de bytes. El servlet se da cuenta de esto y salidas de la imagen.

    Skeet, puedo obtener el byte[] a partir de un servicio web. Puedo enviar el ID de Usuario y la huella digital para el servicio web donde se almacena la imagen, así que Si están en lo correcto me sale el byte[] de nuevo.
    Seguro, pero es generalmente el navegador en lugar de Java que convierte la byte[] de vuelta a una imagen, así que no puedo ver tu respuesta como relevantes.
    Por favor, mueva su comentario de esta respuesta a la pregunta. De esa manera Jon será informado de ello (AFAIU).

    OriginalEl autor Matt

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea