Bonjour à tous,

voici mon problème... Je parviens à redimensionner une image (ce qui n'est pas un grand exploit) cependant je constate une perte de qualité. L'image en sortie est pixelisée alors que la source ne l'est pas. Voici les deux moyens que j'ai essayé :

1er moyen :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
public BufferedImage executePlugin(BufferedImage image) {
	BufferedImage resized = image;
 
	Dimension dim = computeDimension(resizeInfo, image);
	resized = new BufferedImage((int)dim.getWidth(), (int)dim.getHeight(), image.getType());
 
        Graphics2D graphics2D = resized.createGraphics();
        graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
	graphics2D.drawImage(image, 0, 0, (int)dim.getWidth(), (int)dim.getHeight(), null);			
	return resized;
}
Commentaire : computeInfo(...) calcule le ratio entre la hauteur et la largeur et retourne les futures dimensions que devra avoir l'image.

2ème moyen :

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
26
27
public BufferedImage executePlugin(BufferedImage image) {
	Dimension dim = computeDimension(resizeInfo, image);
        // getScaledInstance(...) return an java.awt.image wich will be converted to a BufferedImage by createBufferedImage
	Image resized = image.getScaledInstance((int) dim.getWidth(), (int) dim.getHeight(), ToolkitImage.SCALE_REPLICATE);
	return createBufferedImage(resized, new Label());
}
 
 
static private BufferedImage createBufferedImage(Image imageIn, Component comp) {
    return createBufferedImage(imageIn, BufferedImage.TYPE_INT_RGB, comp);
}
 
 
static private BufferedImage createBufferedImage(Image imageIn,
		      int imageType, Component comp) {
    MediaTracker mt = new MediaTracker(comp);
    mt.addImage(imageIn, 0);
    try {
      mt.waitForID(0);
    } catch (InterruptedException ie) {
    }
    BufferedImage bufferedImageOut = new BufferedImage(imageIn.getWidth(null), imageIn.getHeight(null), imageType);
    Graphics g = bufferedImageOut.getGraphics();
    g.drawImage(imageIn, 0, 0, null);
 
    return bufferedImageOut;
}


Voilà, je ne sais pas trop ce qu'il se passe Comme je l'ai dit, je souhaite garder la même qualité d'image en sortie qu'en entrée.

Un grand merci à ceux qui auront réussi ou du moins qui auront tenté de m'aider.

Coyote