请考虑以下示例图片:
所有对象(矩形,形状,文本等)都写在BufferedImage
中。我的问题是,在我写了graphics.drawline(..)
之后,如何撤消,重置或清除我创建的行。即使我重新执行图表的初始化,我画的线仍然存在。
我仍然可以捕捉线条的坐标。如果它是一个普通的背景,我可以用相同的背景重新绘制它。但是,在这种情况下,这不会起作用。
答案 0 :(得分:0)
无法撤消使用Graphics执行的操作。但是你还可以做其他事情来恢复你的形象。
在执行您可能要撤消的任何操作之前,请保留图像的副本。 并在需要时重新绘制。
在执行您可能要撤消的任何操作之前,请保留图像区域的剪辑图像。并在需要时重新绘制该区域。
要保持这些尺寸有限的图像的堆栈,最好还是重新进行系列撤消。不要使堆栈大小太大,因为它会消耗堆内存
答案 1 :(得分:0)
我使用深层副本找到答案:)
所以,首先,我深度复制了原始图像或默认图像。然后,如果我在原始文件上写了一些东西,我会用备份复制(再次深度复制)覆盖它。
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);
}
可以找到完整的代码here ..