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 :

[Java2D]Agrandir une image


Sujet :

2D Java

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut [Java2D]Agrandir une image
    J'ai une image au format BMP que je souhaite agrandir. Pour cela j'utilise le bout de code que j'ai trouvé dans la FAQ (http://java.developpez.com/faq/java/...redimensionner)
    Mon image est bien aggrandi, en revanche il y a une énorme perte de qualité !! (l'image est floue)
    J'aurais oublié de faire quelque chose ???
    Merci de m'aider....

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: [Java2D]Agrandir une image
    Salut,

    Citation Envoyé par Guybrush
    Mon image est bien aggrandi, en revanche il y a une énorme perte de qualité !! (l'image est floue)
    Si tu agrandis une image c'est normal qu'il y ai une perte de qualité...

    As-tu essayé avec un logiciel de dessin d'agrandir l'image dans les mêmes proportions pour voir si le résultat est meilleure...

    a++

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Il te faut modifier les RenderingHints utilisés juste avant le redimensionnement nottement désactiver l'antialiasing et passer l'interpolation en nearest neighbor (algorithme du plus proche voisin) ce qui évitera d'avoir un effet de flou sur une image agrandie ou rétrécie.

    Bien que tout à fait correct le code présent dans la FAQ est un poil débutant pour un usage novice.

    Ceci devrait être plus parlant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static BufferedImage scale(BufferedImage bi, double scaleValue) {
      int width = (int) (bi.getWidth() * scaleValue);
      int height = (int) (bi.getHeight() * scaleValue);
      BufferedImage biNew = new BufferedImage( width, height, bi.getType());
      Graphics2D graphics = biNews.createGraphics();
      graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
      graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
      graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
      graphics.drawImage(bi, 0, 0, width, height, null);
      graphics.dispose();
      return biNew;
    }
    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

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Ce n'est plus flou mais c'est laid ^^
    Romain Guy
    Android - Mon livre - Mon blog

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    "Tout-à-fait Therry" mais il semble que ce soit ce qu'il désire : un zoom sans effet de flou.

    Ah oui et je voulais dire "un poil déroutant/rebutant pour un novice"... aah moi et mes lapsus.
    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

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par bouye
    Il te faut modifier les RenderingHints utilisés juste avant le redimensionnement nottement désactiver l'antialiasing et passer l'interpolation en nearest neighbor (algorithme du plus proche voisin) ce qui évitera d'avoir un effet de flou sur une image agrandie ou rétrécie.

    Bien que tout à fait correct le code présent dans la FAQ est un poil débutant pour un usage novice.

    Ceci devrait être plus parlant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static BufferedImage scale(BufferedImage bi, double scaleValue) {
      int width = (int) (bi.getWidth() * scaleValue);
      int height = (int) (bi.getHeight() * scaleValue);
      BufferedImage biNew = new BufferedImage( width, height, bi.getType());
      Graphics2D graphics = biNews.createGraphics();
      graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
      graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
      graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
      graphics.drawImage(bi, 0, 0, width, height, null);
      graphics.dispose();
      return biNew;
    }
    Super, ca marche impec avec ton code ! merci bcp.
    Juste une remarque, il fallut que je change une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage biNew = new BufferedImage( width, height, bi.getType());
    En remplacant bi.getType() par BufferedImage.TYPE_INT_ARGB. Sinon mon image BMP était en noir et blanc (uniquement les BMP pas JPG).
    Il y a-t-il un risque à forcer le type comme je le fais ?

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Tiens c'est bizarre. Mais faut dire que j'ai jamais essayé avec les BMP, peut-être ont-elles un type TYPE_CUSTOM ?
    Non aucun risque majeur à ma connaissance, hors ceux d'utiliser plus de ressources ou parfois de ne pas avoir d'accélération matérielle (suivant les version de la JVM). Si tu n'as pas de transparence (sais même pas si les BMP supportent la transparence) utilise plutot TYPE_INT_RGB à la place (normalement ca devrait marcher).

    Si Gfx repasse il te donnera probablement plus d'indications.
    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

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    La meilleure chose a faire est en fait celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GraphicsConfiguration configuration = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
    BufferedImage compatibleImage = configuration.createCompatibleImage(image.getWidth(), image.getHeight());
    Cela donne une image toujours compatible avec le peripherique d'affichage et qui beneficiera donc d'un paquet d'accelerations materielles. Sur une de mes recentes demos j'ai observe une amelioration des performances de x4 a x30 en utilisant une image compatible (a l'oppose du type d'image BYTE_BGR utilise par ImageIO pour charger des JPEG). De maniere generale, sur des machines de bureau classiques, le TYPE_INT_ARGB est le plus versatile et le plus efficace. Je n'utilise que cela personnellement.
    Romain Guy
    Android - Mon livre - Mon blog

  9. #9
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    Effectivement, c'est bcp mieux en utilisant cette méthode !! merci du conseil.

    GFX -> tu m'a l'air d'etre un spécialiste Java2D, est ce que par hasard tu aurais une idée au problème que j'avais évoqué dans ce post :

    http://www.developpez.net/forums/vie...er=asc&start=0

    Malgré les réponses que j'ai eu, je n'ai tjs pas réussit à résoudre mon problème.

Discussions similaires

  1. agrandir une image
    Par tigzirt dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/12/2006, 15h43
  2. Agrandir une image dans un contrôle "static"
    Par Silverstone dans le forum Windows
    Réponses: 3
    Dernier message: 19/07/2006, 13h45
  3. [VB6] Me permettre d'agrandir une IMAGE
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 28
    Dernier message: 03/05/2006, 18h56
  4. Agrandir une image au passage de la souris
    Par matika dans le forum C++Builder
    Réponses: 7
    Dernier message: 09/03/2006, 00h10
  5. Réponses: 3
    Dernier message: 19/01/2006, 14h08

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