IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Sauver image après modification des pixels


Sujet :

2D Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Sauver image après modification des pixels
    Bonjour,

    Je travaille sur une application Java dans laquelle je charge une image binaire BMP dans une BufferedImage, puis je stocke les valeurs des pixels dans un tableau d'entiers (avec la méthode "getRGB()") et les modifie.
    Enfin, je reconstitue une BufferedImage à partir du tableau modifié avec "setRGB()" et je sauvegarde l'image dans un fichier BMP.
    Seulement, le fichier image en output est bien créé, mais il fait 0 octet, donc est vide.

    Si je charge juste l'image, met les valeurs des pixels dans un tableau et recrée l'image à partir du tableau sans le modifier, alors l'image est sauvegardée correctement.

    Auriez-vous une idée pour régler mon problème, afin que l'image modifiée soit sauvegardée correctement?

    Merci beaucoup!

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Montre-nous ton code.
    Romain Guy
    Android - Mon livre - Mon blog

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    merci de bien vouloir m'aider.

    Voici le code pour mettre les valeurs des pixels de l'image dans un tableau:
    public static void imageToPixel(){

    //This array will contain the pixels values of the image
    pixels=new int[getImgHeight()][getImgWidth()];

    //We get the pixels row by row
    for(int i=0;i<getImgHeight();i++){
    getBImage().getRGB(0,i,getImgWidth(),1,getPixels()[i],0,getImgWidth());
    }
    }
    Et celui pour faire l'opération inverse:
    public static BufferedImage pixelToImage(int[][] pix){

    BufferedImage outputImg = new BufferedImage (getImgWidth(), getImgHeight(),BufferedImage.TYPE_INT_ARGB);

    //we write the pixels, row by row
    for(int i=0;i<getImgHeight();i++){
    outputImg.setRGB (0, i, getImgWidth(), 1, pix[i], 0, getImgWidth());
    }

    return outputImg;
    }
    Pour sauver, j'utilise ImageIO:
    ImageIO.write(outputImage, "BMP", outputFile);
    Pour changer la valeur du pixel[i][j] par "val":
    public static void setPixelValue(int i, int j, int val) {
    pixels[i][j]=val;
    }
    Je reprécise que si j'utilise imageToPixel() pour mettre les valeurs des pixels dans un tableau puis pixelToImage() pour reformer une image et que je sauve cette image sans modifier les valeurs du tableau, ça marche.
    Par contre à la moindre modification dans le tableau, ça ne marche plus.

    Un exemple de modification que je suis amené à faire est d'effacer des points noirs sur l'image, c'est-à-dire les changer en blanc. Le blanc semble être -1, donc je fais:
    setPixelValue(i,j,-1);
    Si le pixel (i,j) est un point que je désire effacer.

    Auriez-vous une idée?
    Apparemment, la façon dont je change la valeur est mauvaise.
    Est-ce qu'utiliser directement -1 est incorrect?
    Pourtant, lorsque je transforme mon image en tableau, les valeurs -1 du tableau correspondent bien au blanc.

  4. #4
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Tu n'aurai tout simplement pas oublié de fermer le fichier ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Fermer le fichier?
    Mais peut-on fermer les File en java?
    Il me semble que seuls les fileOutputStream ont une méthode "close()"...

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci à vous pour votre aide, mon problème est résolu!

    En fait, il fallait utiliser:
    BufferedImage.TYPE_BYTE_INDEXED
    à la place de:
    BufferedImage.TYPE_INT_ARGB
    dans la méthode pixelToImage().

  7. #7
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    oubli pas de mettre

    c'est dans outils de la discussion

    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

Discussions similaires

  1. [GD] Modification des pixels d'une image
    Par young077 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 02/08/2007, 20h10
  2. Réponses: 1
    Dernier message: 21/04/2007, 07h43
  3. Recuperer une image a partir des pixels RGB
    Par Battosaiii dans le forum Langage
    Réponses: 1
    Dernier message: 29/06/2006, 11h37
  4. [Classloader]mon progr ne marche plus après modif des *.class
    Par Melchisedec dans le forum API standards et tierces
    Réponses: 16
    Dernier message: 30/04/2006, 20h48
  5. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo