Bonjour à tous,
J'ai un petit problème de reconstitution d'image JPG à partir d'un byte[] à l'aide de ImageIO. Pour voir à quel niveau se trouve ce probleme, j'ai fait un petit test tout simple, et le resultat m'a un peu surpris:
Je reçois un flux de données correspondant a une image JPG d'un serveur, je transforme ce flux en image JPG grace à la classe ImageIO, puis j'affiche ou j'enregistre cette image sur le disque grace à cette meme classe sans aucun probleme. J'ai tenté l'expérience suivante: je converti cette image en byte[] grace aux classes de flux, puis j'utilise ce meme byte[] pour reconstituer une copie de l'image avec ImageIO, mais surprise!! ça ne marche pas!!! j'obtient une premiere image qui correspond exactement à ce qui doit etre, mais la seconde est totalement noire!
Voici mon code, au cas ou j'aurai laissé passé une petite erreur que vous pourriez localiser, s'il n'y a pas d'erreur, ce serait super que quelqu'un m'explique pourquoi à partir d'une image Img1 tout à fait normal, je recupere son byte[], et à partir de ce byte[], je reconstitue une image Img2 qui est toute noire????
Avec ça, et quand je verifie mon disque, je trouve bien deux images: "image.jpg" qui est bien l'image que je voulais, et "image2.jpg" qui est une image avec les meme dimensions que la premiere, sauf qu'elle est toute noire...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 try{ String codeBase="http://.........."; URL url = new URL(codeBase); URLConnection conn = url.openConnection(); conn.setDoOutput(true); InputStream is=conn.getInputStream(); BufferedInputStream bis=new BufferedInputStream(is); Image imgRes=ImageIO.read(bis); if(imgRes!=null){ BufferedImage bImg=new BufferedImage(imgRes.getWidth(null), imgRes.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics g=bImg.getGraphics(); g.drawImage(imgRes, 0, 0, null); g.dispose(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { ImageIO.write(bImg, "jpg", baos); } finally { baos.close(); } byte[] buffer=baos.toByteArray(); InputStream is2=new ByteArrayInputStream(buffer); BufferedInputStream bis2=new BufferedInputStream(is2); Image imgRes2=ImageIO.read(bis2); BufferedImage bImg2=new BufferedImage(imgRes2.getWidth(null), imgRes2.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics g2=bImg.getGraphics(); g2.drawImage(imgRes2, 0, 0, null); g2.dispose(); ImageIO.write(bImg, "jpg", new File("image.jpg")); ImageIO.write(bImg2, "jpg", new File("image2.jpg")); } }catch (Exception e) { // ecritureErreurDansFichierLog(e); }
Si erreur il y a dans le code, merci de me le signaler, sinon, si le probleme se trouve ailleur, merci de m'orienter sur la marche à suivre pour réaliser ce que je veux, étant donné que ceci n'est qu'un test fait tout à fait par hasard que j'ai fait après qu'une plus grosse partie de mon projet ne voulait pas fonctionner comme souhaité!
Merci![]()
Partager