Enregistrement sans perte d'un BufferedImage
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:
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();
}
}
} |