Malheureusement, les performances de getScaledInstance() sont très faibles, voire problématiques.
L'autre approche consiste à créer une nouvelle image tamponnée et à dessiner une version à l'échelle de l'original sur la nouvelle image.
BufferedImage resized = new BufferedImage(newWidth, newHeight, original.getType());
Graphics2D g = resized.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(original, 0, 0, newWidth, newHeight, 0, 0, original.getWidth(),
original.getHeight(), null);
g.dispose();
newWidth,newHeight indiquent la nouvelle taille de la BufferedImage et doivent être calculés correctement. En cas de mise à l'échelle des facteurs :
int newWidth = new Double(original.getWidth() * widthFactor).intValue();
int newHeight = new Double(original.getHeight() * heightFactor).intValue();
EDIT : J'ai trouvé l'article illustrant le problème de performance : Les périls d'Image.getScaledInstance()
1 votes
Un excellent tutoriel : glyphic.com/transformer/applet/1intro.html
0 votes
Au moment où nous écrivons ces lignes, la réponse la plus populaire est la mauvaise réponse. Elle met l'image à l'échelle, mais elle renvoie une image de la même taille, avec les 3/4 de l'image manquants. C'est la réponse donnée par trashgod. C'est proche, mais il y a un petit bug.
0 votes
Merci, @MiguelMunoz. Au fur et à mesure que nous recevons des commentaires, je peux modifier la réponse.