你如何克隆一个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)?