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

Java Discussion :

Redimensionnement d'une image


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Par défaut Redimensionnement d'une image
    Bonjour à tous !

    Je souhait redimensionner une image, mais en gardant les proportions.
    Une image de 25x25 pixels, je souhaite en avoir une nouvelle de 250x250 avec l'image centrée, et du blanc autour.
    Je me suis concocté une petite méthode qui me réalise déjà ce travail :

    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
     
    public BufferedImage getImageResized(BufferedImage recupImage, int tailleMaxImg) {
      int xDecalage = (tailleMaxImg - recupImage.getWidth()) / 2;
      int yDecalage = (tailleMaxImg - recupImage.getHeight()) / 2;
      BufferedImage newImage = new BufferedImage(tailleMaxImg, tailleMaxImg, 1);
     
      for (int i = 0; i < newImage.getWidth(); i++) {
        for (int j = 0; j < newImage.getHeight(); j++) {
          if (j > yDecalage && j < newImage.getHeight() - (yDecalage + 1) && i > xDecalage && i < newImage.getWidth() - (xDecalage)) {
            newImage.setRGB(i, j, recupImage.getRGB(i - xDecalage, j - yDecalage));
          } else {
            newImage.setRGB(i, j, 16777215);
          }
        }
      }
     
      return (newImage;
    }
    Cette méthode fonctionne assez bien. Sauf que j'ai tenté pour une image png, avec un fond transparent. J'ai obtenu la nouvelle image avec du noir à la place du transparent, alors que j'aurai voulu plutôt du blanc, ou même garder le tansparent.

    J'avoue que je suis perdu à ce niveau-là ... Je n'ai pas trouvé de librairie qui réalisait déjà ce travail, ce pourquoi j'ai décidé de faire moi-même cette méthode.

    Auriez-vous une idée ?

    Je vous remercie d'avance

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Je pense que tu n'as pas crée d'image en RGBA (ou ARGB) mais en RGB donc il n'y as pas d'alpha, donc pas de transparence.

    Je dis cela car ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage newImage = new BufferedImage(tailleMaxImg, tailleMaxImg, 1);
    qui équivaut a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage newImage = new BufferedImage(512, 512, BufferedImage.TYPE_INT_RGB);
    devrait plutot être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage newImage = new BufferedImage(512, 512, BufferedImage.TYPE_INT_ARGB);
    Et bien évidement lors du remplissage, faire attention au canal alpha.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Par défaut
    Bonsoir,

    ayant un peu lutter avec le canal alpha, je suis parti sur une autre solution. Voici la nouvelle méthode prenant maintnant en compte la transparence :

    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
     
    private RecupImage getImageResized(BufferedImage image, int tailleMax) throws IOException {
        Graphics2D ig2 = image.createGraphics();
        ig2.setBackground(Color.white);
        BufferedImage bufFinal;
     
        if (image.getTransparency() == 1) {
          bufFinal = new BufferedImage(tailleMax, tailleMax, BufferedImage.TYPE_INT_RGB);
        } else {
          bufFinal = new BufferedImage(tailleMax, tailleMax, BufferedImage.TYPE_INT_ARGB);
        }
     
        Graphics2D ig3 = bufFinal.createGraphics();
        ig3.setBackground(Color.white);
        ig3.setColor(Color.white);
        ig3.clearRect(0, 0, tailleMax, tailleMax);
     
        int xPos = (tailleMax - image.getWidth()) / 2;
        int yPos = (tailleMax - image.getHeight()) / 2;
        ig3.drawImage(image, xPos, yPos, null);
     
        return bufFinal;
      }
    Merci pour m'avoir mis sur la piste avec le type de l'image

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Bien joué
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    En Java on ferait plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(image.getTransparency() == Transparency.OPAQUE) {
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. ASP : redimensionner/compresser une image
    Par laptiote dans le forum ASP
    Réponses: 6
    Dernier message: 23/07/2007, 17h46
  2. Redimensionnement d'une image en même temps que sa JFrame
    Par mandou1 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 22/06/2007, 11h04
  3. Réponses: 2
    Dernier message: 27/11/2006, 14h16
  4. [JDesktopPane] Redimensionner d'une image
    Par GLDavid dans le forum Composants
    Réponses: 17
    Dernier message: 05/07/2006, 10h03
  5. probleme redimensionnement d'une image
    Par meteor4 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/11/2004, 13h58

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