Bonsoir,
J'ai une augmantation importante de la memoire ram avec ce code:
Je fais des captures d'ecran dans une boucle while... La mémoire augemente petit a petit... Je crois avoir trouver le coupable, cette fonction: makeSWTImage(d, img.getImage()) //elle permet de convertire une image AWT en une image SWT
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 [...] out = new ObjectOutputStream(socket.getOutputStream()); in = new ObjectInputStream(socket.getInputStream()); while (true) { ImageIcon img = (ImageIcon) in.readObject(); try { canvas.setBackgroundImage(makeSWTImage(d,img.getImage())); } catch (OutOfMemoryError e) { System.gc(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } ); }
Voici cette fameuse fonction:
Apres plusieurs jours de recherche et de galère j'espère que vous pourrez me donner un petit coup de main ^^
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 org.eclipse.swt.graphics.Image makeSWTImage(Display display, java.awt.Image ai) throws Exception { int width = ai.getWidth(null); int height = ai.getHeight(null); BufferedImage bufferedImage = null; bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = null; g2d = bufferedImage.createGraphics(); g2d.drawImage(ai, 0, 0, null); g2d.dispose(); int[] data = null; data = ((DataBufferInt)bufferedImage.getData().getDataBuffer()) .getData(); ImageData imageData = null; imageData = new ImageData(width, height, 24, new PaletteData(0xFF0000, 0x00FF00, 0x0000FF)); imageData.setPixels(0, 0, data.length, data, 0); org.eclipse.swt.graphics.Image swtImage = new org.eclipse.swt.graphics.Image(display, imageData); return swtImage; }
Merci.
Olivier
Partager