如何在Java中重置或清除或撤消DrawLine

时间:2015-06-28 19:00:18

标签: java graphics

请考虑以下示例图片:

http://i61.tinypic.com/ehlr1x.jpg.

所有对象(矩形,形状,文本等)都写在BufferedImage中。我的问题是,在我写了graphics.drawline(..)之后,如何撤消,重置或清除我创建的行。即使我重新执行图表的初始化,我画的线仍然存在。

我仍然可以捕捉线条的坐标。如果它是一个普通的背景,我可以用相同的背景重新绘制它。但是,在这种情况下,这不会起作用。

2 个答案:

答案 0 :(得分:0)

无法撤消使用Graphics执行的操作。但是你还可以做其他事情来恢复你的形象。

  1. 在执行您可能要撤消的任何操作之前,请保留图像的副本。 并在需要时重新绘制。

  2. 在执行您可能要撤消的任何操作之前,请保留图像区域的剪辑图像。并在需要时重新绘制该区域。


  3. 要保持这些尺寸有限的图像的堆栈,最好还是重新进行系列撤消。不要使堆栈大小太大,因为它会消耗堆内存

答案 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 ..