你如何克隆一个BufferedImage

我有一个有许多bufferedimages的对象,我想创建一个新的对象,将所有的bufferedimages复制到新的对象中,但是这些新的图像可能会被改变,我不希望原始对象图像通过改变新的物体图像。

明白了吗?

这有可能做到,任何人都可以提出一个好的方法来做到这一点吗? 我曾想过getSubImage,但是在某处读取子图像的任何更改都会重新选回父图像。

我只是想能够得到一个完全独立的副本或一个BufferedImage的克隆


像这样?

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);
}

我这样做:

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;
}

它工作得很好,使用起来很简单。


前面提到的过程在应用于子图像时失败。 这是一个更完整的解决方案:

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);
}
链接地址: http://www.djcxy.com/p/6963.html

上一篇: How do you clone a BufferedImage

下一篇: How do you do a deep copy of an object in .NET (C# specifically)?