How do you clone a BufferedImage How do you clone a BufferedImage java java

How do you clone a BufferedImage


Something like this?

static BufferedImage deepCopy(BufferedImage bi) { ColorModel cm = bi.getColorModel(); boolean isAlphaPremultiplied = cm.isAlphaPremultiplied(); WritableRaster raster = bi.copyData(null); return new BufferedImage(cm, raster, isAlphaPremultiplied, null);}


I do this:

public static BufferedImage copyImage(BufferedImage source){    BufferedImage b = new BufferedImage(source.getWidth(), source.getHeight(), source.getType());    Graphics g = b.getGraphics();    g.drawImage(source, 0, 0, null);    g.dispose();    return b;}

It works fairly well and it is simple to use.


The previously mentioned procedure fails when applied to sub images. Here is a more complete solution:

public static BufferedImage deepCopy(BufferedImage bi) {    ColorModel cm = bi.getColorModel();    boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();    WritableRaster raster = bi.copyData(bi.getRaster().createCompatibleWritableRaster());    return new BufferedImage(cm, raster, isAlphaPremultiplied, null);}