首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何克隆BufferedImage

如何克隆BufferedImage
EN

Stack Overflow用户
提问于 2010-08-19 00:10:06
回答 6查看 62.2K关注 0票数 128

我有一个对象,其中有许多缓冲区图像,我想创建一个新对象,将所有缓冲区图像复制到新对象中,但这些新图像可能会被更改,我不希望通过更改新对象图像来更改原始对象图像。

清楚了吗?

这有可能做到吗?有没有人能建议一个好的方法呢?我曾考虑过getSubImage,但在某处读到对子映像的任何更改都会反射回父映像。

我只希望能够获得一个全新的、完全独立的BufferedImage拷贝或克隆

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-19 00:26:16

像这样的东西?

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);
}
票数 178
EN

Stack Overflow用户

发布于 2013-10-12 05:04:51

我这样做:

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

它工作得相当好,而且使用起来也很简单。

票数 53
EN

Stack Overflow用户

发布于 2014-11-13 03:19:41

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

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);
}
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3514158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档