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????

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

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