Bonjour,
Je poste ici car mon problème concerne une BufferedImage mais j'effectue mon traitement dans une servlet.
C'est assez bizarre, car mon code marchait une fois deployé sur le tomcat de netbeans, mais pas sur un tomcat normal ou encore sur celui d'Eclipse.
Donc j'essaye d'ouvrir une image, de la retailler et de l'afficher (mon projet ne se reduisait pas à ça, mais là, j'essaye de revenir au plus simple). j'arrive à l'ouvrir et à l'afficher mais dès que j'essaye de la retailler, là j'ai plus rien, pas d'Exception mais ma BufferedImage est vide.
A cause de ce code là :
Mmon traitement complet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 newBuf = new BufferedImage(150, 150, BufferedImage.TYPE_INT_ARGB); Graphics2D g = newBuf.createGraphics(); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g.drawImage(buf, 0, 0, 150, 150, null); g.dispose();
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 ServletContext sce = this.getServletContext(); String sourcePath = sce.getRealPath("/images/naissance.jpg"); File fic = new File(sourcePath); BufferedImage buf = null; try { buf = ImageIO.read(fic); } catch (IOException e) { e.printStackTrace(); } //traitement à probleme newBuf = new BufferedImage(150, 150, BufferedImage.TYPE_INT_ARGB); Graphics2D g = newBuf.createGraphics(); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g.drawImage(buf, 0, 0, 150, 150, this); g.dispose(); //je renvois directement le flux de l'image, au lieu d'ecrire un fichier this.response.setContentType("image/jpeg"); ByteArrayOutputStream out = new ByteArrayOutputStream(); try { ImageIO.write(buf, "jpeg", out); out.writeTo(response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); }
Et ça ne genere pas d'Exception mais je n'ai plus aucun flux de renvoyé.
Donc, j'ai cherché un peu, il semble que ça vienne du traitement asynchrone de mes BufferedImage. Il faudrait que j'utilise un ImageObserver pour continuer mon traitement mais je ne vois pas comment le mettre en place.
Si vous avez une idée ?
Merci d'avance.
Partager