Ecrire un fichier BMP avec Java Advanced Imaging (JAI)
Projet gus05 de développement Java :: Chantiers :: Chantiers techniques :: Gestion des données :: Formats de fichiers :: Format Image BMP
Page 1 sur 1
Ecrire un fichier BMP avec Java Advanced Imaging (JAI)
Le fichier BMP (Bitmap) est le format de fichier de prédilection pour stocker des images sans perte de qualité.
L'API Java Advanced Imaging permet entre autres choses d'enregistrer les images dans des fichiers BMP. Vous allez d'abord
Vous pouvez télécharger et installer les deux jars nécessaires (jai_codec.jar et jai_core.jar) à partir de l'URL suivante :
http://java.sun.com/products/java-media/jai/downloads/download-1_1_3.html
Le code source qui permet d'enregistrer un objet RenderedImage dans un fichier (objet File) est le suivant :
Le plus difficile est d'obtenir un objet de type RenderedImage qui soit compatible avec le format BMP, c'est à dire sans propriétés de transparence (ne possédant que au maximum 3 bandes dans son raster). Voici le code source qui permet d'obtenir un tel objet à partir de n'importe quel objet Image ou RenderedImage :
Voici pour finir le code source complet de l'entité gus.file.write.bmp2 qui permet d'enregistrer une image dans un fichier au format BMP (les deux objets File et Image étant passés sous la forme d'un tableau dans la méthode give)
L'API Java Advanced Imaging permet entre autres choses d'enregistrer les images dans des fichiers BMP. Vous allez d'abord
Vous pouvez télécharger et installer les deux jars nécessaires (jai_codec.jar et jai_core.jar) à partir de l'URL suivante :
http://java.sun.com/products/java-media/jai/downloads/download-1_1_3.html
Le code source qui permet d'enregistrer un objet RenderedImage dans un fichier (objet File) est le suivant :
- Code:
OutputStream os = new FileOutputStream(file);
BMPEncodeParam param = new BMPEncodeParam();
ImageEncoder enc = ImageCodec.createImageEncoder("BMP",os,param);
enc.encode(image);
os.close();
Le plus difficile est d'obtenir un objet de type RenderedImage qui soit compatible avec le format BMP, c'est à dire sans propriétés de transparence (ne possédant que au maximum 3 bandes dans son raster). Voici le code source qui permet d'obtenir un tel objet à partir de n'importe quel objet Image ou RenderedImage :
- Code:
private RenderedImage toRenderedImage(Object obj) throws Exception
{
if(obj instanceof RenderedImage)
{
RenderedImage image = (RenderedImage) obj;
if(image.getData().getNumBands()>3)
return toBufferedImage(image);
return image;
}
if(obj instanceof Image) return toBufferedImage((Image) obj);
throw new Exception("Invalid data type: "+obj.getClass().getName());
}
private BufferedImage toBufferedImage(Image image)
{
BufferedImage buffImg = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
buffImg.createGraphics().drawImage(image,0,0,null);
return buffImg;
}
private BufferedImage toBufferedImage(RenderedImage image)
{
BufferedImage buffImg = new BufferedImage(image.getWidth(),image.getHeight(),BufferedImage.TYPE_INT_RGB);
buffImg.createGraphics().drawRenderedImage(image,null);
return buffImg;
}
Voici pour finir le code source complet de l'entité gus.file.write.bmp2 qui permet d'enregistrer une image dans un fichier au format BMP (les deux objets File et Image étant passés sous la forme d'un tableau dans la méthode give)
- Code:
package gus05.entity.gus.file.write.bmp2;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import com.sun.media.jai.codec.BMPEncodeParam;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageEncoder;
import gus05.framework.core.Entity;
import gus05.framework.features.Give;
public class FileWriteBmp2 implements Entity, Give {
public String getName() {return "gus.file.write.bmp2";}
public String getCreationDate() {return "2011.06.15";}
public void give(Object obj) throws Exception
{
Object[] data = (Object[]) obj;
if(data.length!=2) throw new Exception("Wrong data number: "+data.length);
File file = (File) data[0];
RenderedImage image = toRenderedImage(data[1]);
OutputStream os = new FileOutputStream(file);
BMPEncodeParam param = new BMPEncodeParam();
ImageEncoder enc = ImageCodec.createImageEncoder("BMP",os,param);
enc.encode(image);
os.close();
}
private RenderedImage toRenderedImage(Object obj) throws Exception
{
if(obj instanceof RenderedImage)
{
RenderedImage image = (RenderedImage) obj;
if(image.getData().getNumBands()>3)
return toBufferedImage(image);
return image;
}
if(obj instanceof Image) return toBufferedImage((Image) obj);
throw new Exception("Invalid data type: "+obj.getClass().getName());
}
private BufferedImage toBufferedImage(Image image)
{
BufferedImage buffImg = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
buffImg.createGraphics().drawImage(image,0,0,null);
return buffImg;
}
private BufferedImage toBufferedImage(RenderedImage image)
{
BufferedImage buffImg = new BufferedImage(image.getWidth(),image.getHeight(),BufferedImage.TYPE_INT_RGB);
buffImg.createGraphics().drawRenderedImage(image,null);
return buffImg;
}
}
Sujets similaires
» Programming in Java Advanced Imaging
» SSH avec l'API Java Secured Channel
» Afficher des images avec Java
» Connaitre les adresses IP de sa machine avec Java
» Obtenir la semi-transparence avec Java Native Access
» SSH avec l'API Java Secured Channel
» Afficher des images avec Java
» Connaitre les adresses IP de sa machine avec Java
» Obtenir la semi-transparence avec Java Native Access
Projet gus05 de développement Java :: Chantiers :: Chantiers techniques :: Gestion des données :: Formats de fichiers :: Format Image BMP
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Mar 16 Sep - 12:01 par Gus
» Présentation du jeu Vindinium
Jeu 20 Fév - 15:32 par Gus
» Rechercher la cible la plus proche avec le "Breadth First Search"
Jeu 20 Fév - 13:06 par Gus
» Impression d'écran avec sélection de zone
Jeu 20 Fév - 12:12 par Gus
» Envoyer un mail par un compte Gmail
Jeu 25 Avr - 14:04 par Gus
» Streaming : comment télécharger les vidéos
Lun 4 Fév - 19:59 par Gus
» Synology : installer ipkg
Mar 22 Jan - 21:22 par Gus
» Trouver le type de lecteur avec JNA
Mer 9 Jan - 23:11 par Gus
» Adresse ip publique et adresse ip privée, Internet box et UPnP
Mer 9 Jan - 21:02 par Gus
» Accéder au numéro de série du lecteur par un script vb
Mer 9 Jan - 19:31 par Gus