Bonjour,
Pour la mise en place d'un système de cache d'images, je cherche à enregistrer des BufferedImage dans un fichier (qui sera de toute façon supprimé à la fermeture de l'application) mais sans perte.
Pour l'instant, j'enregistrais en BMP (mais même pas sûr qu'il prenne en compte les canaux Alpha), les spécifications de ImageIO.write sont un peu évasives.
Mais je me dis qu'il y a peut être une technique déjà toute fait pour ça (et qui n'utiliserait pas forcement ImageIO).
Donc si quelqu'un a une idée un peu mieux qu'un vieux bmp...
Merci
Pour l'instant, le code ressemblait à ça :
Code Java : 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 public class FileImageCache implements ImageCache { static private Logger logger = Logger.getAnonymousLogger(); private Map<Object, File> files = new HashMap<Object, File>(); /* (non-Javadoc) * @see millie.gui.cache.ImageCache#clear() */ @Override public void clear() { for(Map.Entry<Object, File> e : files.entrySet()) { File f = e.getValue(); f.delete(); } } /* (non-Javadoc) * @see millie.gui.cache.ImageCache#get(java.lang.Object) */ @Override public BufferedImage get(Object id) { File f = files.get(id); if(f==null) return null; BufferedImage im = null; try { im = ImageIO.read(f); } catch(IOException e) { logger.warning(e.getMessage()); e.printStackTrace(); } return im; } /* (non-Javadoc) * @see millie.gui.cache.ImageCache#put(java.lang.Object, java.awt.image.BufferedImage) */ @Override public void put(Object id, BufferedImage im) { try { File f = File.createTempFile("zzz", "bmp"); f.deleteOnExit(); ImageIO.write(im, "bmp", f); files.put(id, f); } catch (IOException e) { logger.warning(e.getMessage()); e.printStackTrace(); } } /* (non-Javadoc) * @see millie.gui.cache.ImageCache#remove(java.lang.Object) */ @Override public void remove(Object id) { File f = files.get(id); if(f!=null) { f.delete(); } } }
Partager