-
Redimensionner une image
Bonjour,
Je souhaite redimensionner une image.
J'ai vu qu'en utilisant un BufferedImage et un drawImage() je pouvais le faire simplement en indiquant une nouvelle dimension.
J'aimerais surtout savoir comme ce redimensionnement est effectué: s'agit-il, dans le cas d'une réduction d'un facteur 2, d'un simple echantillonnage d'un pixel sur 2 en hauteur et largeur?
Merci
-
Bonjour,
Il existe 2 méthodes différentes pour redimensionner
g.drawImage(x,y,w,h,null) dont tu parles
tu peux avec cette méthode choisir la qualité du scale avec la méthode
getRenderingHint(RenderingHints.Key key, Object value)
la clé : RenderingHints.KEY_INTERPOLATION
les valeurs possibles :
- RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR (le mode par defaut). C'est le plus rapide mais elle perd beaucoup d'infos pour les gros scales. Je ne me souviens plus des détails mais ça prend la couleur d'1 pixel environnant les pixels initiaux pour le rendu final.
- RenderingHints.VALUE_INTERPOLATION_BILINEAR
Bien mieux mais plus lent. Ici la couleur rendue est une combinaison de 4 pixels environnant le pixel initial.
- RenderingHints.VALUE_INTERPOLATION_BICUBIC
Ici c'est encore mieux mais encore plus lent. Ca prend un carre de 4X4 pixels pour déterminer la couleur finale.
Ton choix de valeur va donc dépendre du compromis entre vitesse et qualité que tu vas choisir.
Petite astuce : une méthode plus rapide que BILINEAR et BICUBIC consiste à effectuer des scales /2 successifs avec NEAREST_NEIGHBOR
La seconde méthode consiste à utiliser getScaleInstance(w,h,ints) mais elle est moins bien je te la déconseille donc. Néanmoins si tu veux des infos n'hésites pas.
-