Envoyé par
bouye
Il te faut modifier les
RenderingHints utilisés juste avant le redimensionnement nottement désactiver l'antialiasing et passer l'interpolation en
nearest neighbor (algorithme du plus proche voisin) ce qui évitera d'avoir un effet de flou sur une image agrandie ou rétrécie.
Bien que tout à fait correct le code présent dans la FAQ est un poil débutant pour un usage novice.
Ceci devrait être plus parlant :
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public static BufferedImage scale(BufferedImage bi, double scaleValue) {
int width = (int) (bi.getWidth() * scaleValue);
int height = (int) (bi.getHeight() * scaleValue);
BufferedImage biNew = new BufferedImage( width, height, bi.getType());
Graphics2D graphics = biNews.createGraphics();
graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
graphics.drawImage(bi, 0, 0, width, height, null);
graphics.dispose();
return biNew;
} |
Super, ca marche impec avec ton code ! merci bcp.
Juste une remarque, il fallut que je change une ligne :
BufferedImage biNew = new BufferedImage( width, height, bi.getType());
En remplacant bi.getType() par BufferedImage.TYPE_INT_ARGB. Sinon mon image BMP était en noir et blanc (uniquement les BMP pas JPG).
Il y a-t-il un risque à forcer le type comme je le fais ?
Partager