2011-08-19 4 views
4

J'ai un byte[] que je veux convertir en image et afficher l'image dans une étiquette. L'octet [] est au format jpeg 2000. J'ai essayé le code ci-dessous, mais il renvoie null:Convertir un tableau d'octets (octet []) en Image en Java

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

La valeur d'image revient comme null.

Je veux être en mesure d'afficher l'image dans une étiquette comme ci-dessous:

jLabel.setIcon(new ImageIcon(image)); 

Merci

+1

Copie possible de http://stackoverflow.com/questions/2662916/read-jpeg2000-files-in-java –

+1

Je suppose que vos données d'entrée sont incorrectes. S'il vous plaît montrer comment vous avez obtenu les données. –

+0

Jetez un oeil ici: http://stackoverflow.com/questions/1212882/convert-byte-array-to-image-in-java-without-know-the-type – Kris

Répondre

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

Ce qui précède est comment sa a marché pour moi dans le passé où l'utilisateur a un profil image simplement stockée dans un tableau d'octets. La servlet réalise cela et sort l'image.

+0

@Jon Skeet, je reçois l'octet [] à partir d'un service Web. J'envoie l'identifiant et l'empreinte digitale au service web où l'image est stockée, donc s'ils sont corrects, je récupère l'octet []. – user898755

+0

Bien sûr, mais c'est généralement le navigateur plutôt que Java qui retourne le 'byte []' à une image, donc je ne vois pas votre réponse comme pertinente. –

+0

@user Veuillez déplacer votre commentaire de cette réponse à la question. De cette façon, Jon en sera informé (AFAIU). –

9

Pour convertir un tableau d'octets, à savoir byte[] dans un Image, utilisez getImage(). Probablement le moyen le plus simple de le faire est d'instancier un ImageIcon en utilisant le constructeur ImageIcon(byte[]), puis d'appeler le getImage(). Ceci est illustré dans la méthode ci-dessous, en particulier la dernière ligne:

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

Je pense que cela peut-être utilisée pour png, gif, bmp et jpg images. Le tableau d'octets ne doit pas non plus être codé en dur, comme dans cet exemple.

Si vous voulez un ImageIcon au lieu d'un Image, ne pas appeler 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); 
} 

Ensuite, vous pouvez appeler jlabel.setIcon(createIconImage());.

Questions connexes