你如何克隆 BufferedImage

新手上路,请多包涵

我有一个对象,里面有很多缓冲图像,我想创建一个新对象,将所有缓冲图像复制到新对象中,但是这些新图像可能会被改变,我不希望通过改变新对象图像。

明白了吗?

这是可能的吗,有人可以建议一个好的方法吗?我想到了 getSubImage 但在某处读到对子图像的任何更改都会反映回父图像。

我只是希望能够获得 BufferedImage 的完全独立的全新副本或克隆

原文由 f1wade 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 967
2 个回答

是这样的吗?

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

原文由 Klark 发布,翻译遵循 CC BY-SA 2.5 许可协议

我这样做:

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

它工作得很好,而且使用简单。

原文由 APerson 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题