BMP image

Fermé
firmin - 20 mai 2009 à 13:47
 firmin - 21 mai 2009 à 21:25
Bonjour, dans le cadre d'un projet de traitement d'image,je dois écrire un porgramme qui lit et affiche à l'écran une image au format BMP, j'ai trouvé ce code source, mais j'ai du mal à écrire la classe main donc appéler les méthodes svp aidez moi, je suis encore débutant en java

/**
* * <p>Titre : BMPImage</p>
* * <p>Description : Classe décrivant la maniére d'enregistrer un fichier image BMP</p>
* * <p>Société : Perso</p>
* * @author Indiana_jules
* * @version 1.0
* */
//Importation des packages nécessaires
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.*;
import java.io.DataInputStream;
* import java.io.DataOutputStream;
* import java.io.File;
* import java.io.FileInputStream;
* import java.io.FileOutputStream;
public class BMPImage {
//Constantes
private static final int MASK = 0xFF;/**Constante de masque pour la comparaison bit à bit*/
/**Méthode permettant de lire une image au format BMP
* * @param filename Fichier image
* * @return Image généré*/
public static Image readBMP(File filename) {
try{
DataInputStream inBMP = new DataInputStream(new FileInputStream(filename));

//On va lire le début de l'entête
inBMP.skipBytes(18);

//Maintenant, on lit la largeur et la hauteur de l'image
int width = readInt(inBMP);
int height = readInt(inBMP);

//On saute les données inutiles del'entête
inBMP.skipBytes(28);

//Nous allons remplir le BufferedImage
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
int sup = (width * 3) % 4;

//Lecture des données
for(int y = height - 1; y >= 0; y--){
for(int x = 0; x < width; x++){
//Récupération des couleurs
img.setRGB(x, y, readColor(inBMP));
}

//On saute le bourrage
inBMP.skipBytes(sup);
}

inBMP.close();
return img;
}
catch(Exception e){
return null;
}
}

/**Méthode permettant de lire une image au format BMP
* * @param filename Endroit où il faut le sauver
* * @return Image généré*/
public static Image readBMP(String filename) {
return readBMP(new File(filename));
}

/**Méthode permettant de lire un entier dans un fichier BMP
* * @param in Flux d'entrée
* * @return Entier lu*/
private static int readInt(DataInputStream in){
byte[] b = new byte[4];
int result = 0;

try{
in.read(b);
result = b[0] & MASK;
result = result + ((b[1] & MASK) << 8);
result = result + ((b[2] & MASK) << 16);
result = result + ((b[3] & MASK) << 24);

}
catch(Exception e){

}

return result;
}

/**Méthode permettant de lire une "couleur" dans un fichier BMP
* * @param in Flux d'entrée
* * @return Entier lu*/
private static int readColor(DataInputStream in){
byte[] b = new byte[3];
int result = 0;

try{
in.read(b);
result = b[0] & MASK;
result = result + ((b[1] & MASK) << 8);
result = result + ((b[2] & MASK) << 16);
}
catch(Exception e){

}

return result;
}


/**Méthode permettant de créer une image au format BMP
* * @param img Image à sauver
* * @param filename Endroit où il faut le sauver
* * @return Permet de savoir si l'enregistrement s'est bien passé*/
public static boolean writeBMP(BufferedImage img, String filename) {
try{
DataOutputStream outBMP = new DataOutputStream(new FileOutputStream(filename));
int resx = img.getWidth();
int resy = img.getHeight();

//écriture de l'entête du fichier
outBMP.write(0x42); //Type
outBMP.write(0x4D); //Type
writeInt(outBMP,resx*resy*3+54); //Taille du fichier
writeInt(outBMP,0); //Réservé
writeInt(outBMP,54);
writeInt(outBMP,40);
writeInt(outBMP,resx); //Largeur
writeInt(outBMP,resy); //Hauteur
outBMP.write(0);
outBMP.write(0);
outBMP.write(24); //Nombre de bits par pixel
outBMP.write(0);
writeInt(outBMP,0);
writeInt(outBMP,resx*resy*3);
writeInt(outBMP,2851);
writeInt(outBMP,2851);
writeInt(outBMP,0);
writeInt(outBMP,0);

//Ecriture du corps dufichier BMP
int sup = (resx * 3) % 4;

for (int y = resy - 1; y >= 0; y--) {
for (int x = 0; x < resx; x++) {
//On écrit la couleur
writeColor(outBMP, img.getRGB(x, y));
}

//Bourrage
for (int j = 0; j < sup; j++)
outBMP.writeByte(0);
}

//Fermeture du fichier
outBMP.close();

return true;
}
catch(Exception e){
return false;
}
}

/**Méthode permettant d'écrire un int dans un DataOutputStream selon les format Intel
* * @param sortie Stream de destination
* * @param n int à écrire*/
private static void writeInt(DataOutputStream sortie, int n) {
try {
sortie.write((n) & MASK);
sortie.write((n>>8) & MASK);
sortie.write((n>>16) & MASK);
sortie.write((n>>24) & MASK);
}
catch (Exception e) {

}
}

/**Méthode permettant d'écrire une "couleur" dans un DataOutputStream
* * @param sortie Stream de destination
* * @param couleur Couleur à écrire */
private static void writeColor(DataOutputStream sortie, int couleur) {
try {
sortie.write((couleur) & MASK);
sortie.write((couleur>>8) & MASK);
sortie.write((couleur>>16) & MASK);
}
catch (Exception e) {

}
}
A voir également:

1 réponse

bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 860
20 mai 2009 à 14:25
Tu t'embêtes pour rien... c'est déjà fait par Java.
Regarde du côté de ImageIO et BufferedImage.

http://java.sun.com/j2se/1.4.2/docs/api/javax/imageio/ImageIO.html
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/BufferedImage.html
0
merci bizu53 c'est très gentil de votre part ,mais j'ai toujours du mal à executer ce code
0
bsr une fois de plus svp ce je veux pour ce programme c"est la classe main j'ai du mal à l'ecrire
merci
0