Per ridimensionare un'immagine, è necessario creare una nuova immagine e disegnarla. Un modo è utilizzare il metodo filter()
di un AffineTransferOp
, come suggerito here. Questo ti permette di scegliere la tecnica di interpolazione.
private static BufferedImage scale1(BufferedImage before, double scale) {
int w = before.getWidth();
int h = before.getHeight();
// Create a new image of the proper size
int w2 = (int) (w * scale);
int h2 = (int) (h * scale);
BufferedImage after = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
AffineTransform scaleInstance = AffineTransform.getScaleInstance(scale, scale);
AffineTransformOp scaleOp
= new AffineTransformOp(scaleInstance, AffineTransformOp.TYPE_BILINEAR);
scaleOp.filter(before, after);
return after;
}
Un altro modo è semplicemente di disegnare l'immagine originale nella nuova immagine, utilizzando un'operazione di ridimensionamento per eseguire il ridimensionamento. Questo metodo è molto simile, ma illustra anche come è possibile disegnare tutto ciò che si desidera nell'immagine finale. (Ho messo in una riga vuota in cui i due metodi iniziano a differire.)
private static BufferedImage scale2(BufferedImage before, double scale) {
int w = before.getWidth();
int h = before.getHeight();
// Create a new image of the proper size
int w2 = (int) (w * scale);
int h2 = (int) (h * scale);
BufferedImage after = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
AffineTransform scaleInstance = AffineTransform.getScaleInstance(scale, scale);
AffineTransformOp scaleOp
= new AffineTransformOp(scaleInstance, AffineTransformOp.TYPE_BILINEAR);
Graphics2D g2 = (Graphics2D) after.getGraphics();
// Here, you may draw anything you want into the new image, but we're
// drawing a scaled version of the original image.
g2.drawImage(before, scaleOp, 0, 0);
g2.dispose();
return after;
}
Un'esercitazione eccellente: http://www.glyphic.com/transform/applet/1intro.html –
partire da questa scrittura, la la risposta più popolare è la risposta sbagliata. Ridimensiona l'immagine, ma restituisce un'immagine della stessa dimensione, con 3/4 dell'immagine mancante. È la risposta data da trashgod. È vicino, ma ha un piccolo bug. – MiguelMunoz