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