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

Multimédia Java Discussion :

Reduction de la taille d'une image et sauvegarde en bmp.


Sujet :

Multimédia Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 44
    Par défaut Reduction de la taille d'une image et sauvegarde en bmp.
    Bonjour a tous
    J'ai un petit probleme concernant la gestion d'image. Je veux charger une image bitmap a partir d'un fichier, reduire sa taille en gardant ses proportions (je veux une hauteur de 512 pixels) et ensuite sauvegrader cette nouvelle image dans un fichier, en conservant le format bitmap.

    Code : 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
     
    //Je lis mon image a partir d'un chemin d'acces
    BufferedImage im=ImageIO.read(new File(((File)implants[0]).getPath()));
     
                    int width = ((im.getWidth() * 512) / im.getHeight());
                    int height=512;
                    /* On crée une nouvelle image aux bonnes dimensions. */
                    BufferedImage buf = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
     
                    /* On dessine sur le Graphics de l'image bufferisée. */
                    Graphics2D g = buf.createGraphics();
                    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                    g.drawImage(im, 0, 0, width, height, null);
                    g.dispose();
     
    //fichier dans lequel je veux copier ma nouvelle image
                    File fileToWriteTo=new File("C:/NewImages/"+0+"image.bmp");
     
    //j'encode en bmp
                     OutputStream os = new FileOutputStream(fileToWriteTo);
                     com.sun.media.jai.codec.BMPEncodeParam param = new com.sun.media.jai.codec.BMPEncodeParam();
                     com.sun.media.jai.codec.ImageEncoder enc = com.sun.media.jai.codec.ImageCodec.createImageEncoder("BMP", os, param);
                     PlanarImage input =PlanarImage.wrapRenderedImage(buf); //JAI.create("fileload",implants[0].getPath());
                     enc.encode(input);
                     os.close();
    Donc voila c'est tout ca qui ne marche pas. Ce qui ne marche pas en fait, c'est la sauvegarde au format bmp. Mais ce qui est bizarre, c'est que si j'essaye de sauvegrader mon image originale, ca marche, mais si je sauvegarde mon image reduite apres l'avoir encodee j'obtiens cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Only images with either 1 or 3 bands can be written out as BMP files.
    ...que je ne comprends pas du tout.

    Voila, si quelqu'un pouvait m'aider ce serait cool, en trouvant pourquoi ca marche pas ou en ayant une autre facon de faire. A mon avis, je suis pas le premier a avoir ce probleme de reduction de taill et de vouloir sauvegarder en bitmap.
    Voile, merci d'avance
    Thomas

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 905
    Billets dans le blog
    54
    Par défaut
    Le probleme semble venir d'une limitation de l'encodeur que tu utilises. As-tu essaye avec ImageIO tout simplement ou l'encodeur du JAI I/O Tools (le package qui contient juste les encodeurs/decodeurs supplementaires) ou celui du JAI complet (JAI = Java Advanced Imaging) ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 44
    Par défaut
    J'ai essaye avec toutes les librairies proposees par JAI il me semble, et il my a rien qui marche. J'ai toujours cette erreur parlant de 1 ou 3 bands que je ne comprends pas du tout.
    Si j'essaye de faire la meme operation mais en sauvegardant en JPEG, ca marche mais mes images sont toutes bleues. Ce sont toujours les bonnes images mais bleues. Et le probleme c'est que le soft que j'utilise pour lire ces images apres ne lit que les bmp ou jpg, donc il me faut du jpeg pas bleu ou du bmp.
    La je suis a bout ca fait deux jours que je suis dessus, et ca veut vraiment pas marcher, Aidez moi !!!!
    Thomas

  4. #4
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 44
    Par défaut
    Bon alors pour ceux que ca interesse j'ai trouve pourquoi mes images etaient toutes bleues. C'etait juste un parametre de ma nouvelle BufferedImage qui faisait ca, en changeant le parametre en question et en creeant une nouvelle BufferedImage comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage buf = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
    on garde toutes les couleurs comme il faut
    Mais ca me resout toujours pas mon probleme de sauvegarde en bmp...

  5. #5
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 44
    Par défaut
    Alors en fait, le meme parametre qui me faisait mon image toute bleue, une fois change me permet de sauvegarder en bmp ;-)))
    Donc c'est regler.
    Voila le code pour ceux qui veulent :

    Code : 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
    BufferedImage im=ImageIO.read(new File(((File)implants[0]).getPath()));
     
                    int width = ((im.getWidth() * 512) / im.getHeight());
                    int height=512;
                    /* On crée une nouvelle image aux bonnes dimensions. */
                    BufferedImage buf = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
     
                    /* On dessine sur le Graphics de l'image bufferisée. */
                    Graphics2D g = buf.createGraphics();
                    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                    g.drawImage(im, 0, 0, width, height, null);
                    g.dispose();
     
                     File fileToWriteTo=new File("C:/NewImages/"+0+"image.bmp");
     
                     OutputStream os = new FileOutputStream(fileToWriteTo);
                     com.sun.media.jai.codec.BMPEncodeParam param = new com.sun.media.jai.codec.BMPEncodeParam();
                   com.sun.media.jai.codec.ImageEncoder enc = com.sun.media.jai.codec.ImageCodec.createImageEncoder("BMP", os, param);
                     PlanarImage input =PlanarImage.wrapRenderedImage(buf); //JAI.create("fileload",implants[0].getPath());
                                     com.sun.media.jai.codecimpl.BMPImageEncoder BMPParam=new com.sun.media.jai.codecimpl.BMPImageEncoder(os,param);
     
                    BMPParam.encode(buf);

  6. #6
    Invité
    Invité(e)
    Par défaut
    salut,
    d'après ce que je sais le paquetage com.sun.media.jai.codec.BMPEncodeParam
    ne fonctionne pas avec les nouvelles version jdk plus précisemment la jdk 1.6 j'ai essaayer de compiler une classe contenant com.sun.media.jai.codec.JPEGEncodeParam est il m'a générer des warnings sur ce paquetage je te conseil de chercher d'autre solution qui diminue le risque de bug et qui fonctionne avec tous les jdk.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer la taille d'une image dans un fichier (GIF/JPEG)
    Par SheikYerbouti dans le forum Multimédia
    Réponses: 4
    Dernier message: 12/05/2005, 14h17
  2. [Photoshop] Changement de taille d'une image
    Par sole dans le forum Imagerie
    Réponses: 4
    Dernier message: 29/04/2005, 16h13
  3. Recuperation de la taille d'une image avec la propriété SRC
    Par CDRIK dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/10/2004, 03h05
  4. [FLASH MX] taille d'une image
    Par matN59 dans le forum Flash
    Réponses: 2
    Dernier message: 10/06/2004, 10h51

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