javaimageimage-processingbufferedimageimage-scaling

How to scale a BufferedImage


Following the javadocs, I have tried to scale a BufferedImage without success here is my code:

BufferedImage image = MatrixToImageWriter.getBufferedImage(encoded);
Graphics2D grph = image.createGraphics();
grph.scale(2.0, 2.0);
grph.dispose();

I can't understand why it is not working, any help?


Solution

  • AffineTransformOp offers the additional flexibility of choosing the interpolation type.

    BufferedImage before = getBufferedImage(encoded);
    int w = before.getWidth();
    int h = before.getHeight();
    BufferedImage after = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    AffineTransform at = new AffineTransform();
    at.scale(2.0, 2.0);
    AffineTransformOp scaleOp = 
       new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
    after = scaleOp.filter(before, after);
    

    The fragment shown illustrates resampling, not cropping; this related answer addresses the issue; some related examples are examined here.