import java.awt.geom.AffineTransform; // uses bilinear interpolation static BufferedImage scaleImage(BufferedImage before, double scale) { if (scale == 1) ret before; int w = before.getWidth(); int h = before.getHeight(); int neww = max(1, iround(w*scale)), newh = max(1, iround(h*scale)); BufferedImage after = new BufferedImage(neww, newh, BufferedImage.TYPE_INT_ARGB); AffineTransform at = new AffineTransform(); at.scale(scale, scale); AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); ret scaleOp.filter(before, after); } static BufferedImage scaleImage(double scale, BufferedImage before) { ret scaleImage(before, scale); }