Redimensionner une image

Résolu/Fermé
Sara426 Messages postés 671 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 - 28 nov. 2012 à 19:26
Sara426 Messages postés 671 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 - 29 nov. 2012 à 21:59
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 :
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:

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
28 nov. 2012 à 19:57
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.
0
Sara426 Messages postés 671 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 63
28 nov. 2012 à 20:51
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.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
28 nov. 2012 à 21:45
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);
	}
}
0
Sara426 Messages postés 671 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 63
29 nov. 2012 à 21:59
Génial. C'est exactement ça.

Un gros gros merci ^^
0