Redimensionner une image
Résolu
Sara426
Messages postés
678
Date d'inscription
Statut
Membre
Dernière intervention
-
Sara426 Messages postés 678 Date d'inscription Statut Membre Dernière intervention -
Sara426 Messages postés 678 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai une image de 500x500 px et j'aimerais la réduire pour qu'elle fasse 50x50 px.
J'utilise un BufferedImage pour la stocker.
Voilà une partie de mon code :
Sauf que là il me prend qu'une partie de l'image.
Est-ce que quelqu'un sait faire ?
Cordialement,
Sara.
J'ai une image de 500x500 px et j'aimerais la réduire pour qu'elle fasse 50x50 px.
J'utilise un BufferedImage pour la stocker.
Voilà une partie de mon code :
BufferedImage image; try { image = ImageIO.read(new File("img/image.png")); } catch (IOException e) { System.out.println("Erreur : impossible de charger "+"img/image.png"); image = null; } g.drawImage(image,50, 50, null);
Sauf que là il me prend qu'une partie de l'image.
Est-ce que quelqu'un sait faire ?
Cordialement,
Sara.
A voir également:
- Redimensionner une image
- Image iso - Guide
- Légender une image - Guide
- Comment redimensionner une image - Guide
- Acronis true image - Télécharger - Sauvegarde
- Transformer une image en icone - Guide
3 réponses
Il faut complètement changer l'image, d'autant que là tu as une énorme perte de qualité vu que tu ne gardes qu'1 pixel sur 100 !
Donc tu vas devoir "découper" ton image en carré de 10x10 pixels et n'en extraire qu'un seul pixel.
La première idée ce serait d'en prendre un (n'importe lequel) parmi ce carré, mais ce n'est pas terrible car le pixel que tu vas choisir n'est pas forcément celui qui correspond mieux à l'ensemble du carré que tu substitues.
Donc il y a d'autres idées, comme faire la "moyenne" des pixels de ce carré, et là il y a plusieurs choix : faire la moyenne sur les composantes RGB mais on va tendre rapidement vers du gris, je pense que le mieux est de faire la moyenne sur du HSB.
Mais comme je l'ai déjà dit ta perte de qualité est énorme donc le résultat ne pourra pas être miraculeux qu'elle que soit la méthode utilisée.
Donc tu vas devoir "découper" ton image en carré de 10x10 pixels et n'en extraire qu'un seul pixel.
La première idée ce serait d'en prendre un (n'importe lequel) parmi ce carré, mais ce n'est pas terrible car le pixel que tu vas choisir n'est pas forcément celui qui correspond mieux à l'ensemble du carré que tu substitues.
Donc il y a d'autres idées, comme faire la "moyenne" des pixels de ce carré, et là il y a plusieurs choix : faire la moyenne sur les composantes RGB mais on va tendre rapidement vers du gris, je pense que le mieux est de faire la moyenne sur du HSB.
Mais comme je l'ai déjà dit ta perte de qualité est énorme donc le résultat ne pourra pas être miraculeux qu'elle que soit la méthode utilisée.
Le problème est pas vraiment sur l'image.
Je peux en prendre une de 10x10, c'est pas un problème.
En fait, je voulais quelle s'adapte à la taille du carré dans lequel je la mets.
Je sais pas si c'est possible.
Je peux en prendre une de 10x10, c'est pas un problème.
En fait, je voulais quelle s'adapte à la taille du carré dans lequel je la mets.
Je sais pas si c'est possible.
Alors si je comprends bien ton problème, ce serait plutôt ça qu'il te faudrait :
g.drawImage(image,0,0,50,50,this);Exemple :
import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JFrame; import javax.swing.JPanel; class ImagePanel extends JPanel { private static final long serialVersionUID = 1; private final Image img; private final int w, h; public ImagePanel(String fileName, int width, int height) { img = Toolkit.getDefaultToolkit().getImage(fileName); w = width; h = height; } public void paintComponent(Graphics g) { g.drawImage(img,0,0,w,h,this); } } public class Test { public static void main(String[] args) { JFrame frame = new JFrame(); frame.add(new ImagePanel("C:/test.gif",50,50)); frame.setSize(100,100); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }