В настоящее время я пишу программу рисования в Java, предназначенную для гибких и комплексных функций. Это было связано с моим окончательным проектом, который я написал за ночь накануне. Из-за этого у него появилось множество тон и ошибок, которые я решал один за другим (например, я могу сохранять только файлы, которые будут пустыми, мои прямоугольники не рисуются правильно, но мои круги...).
На этот раз я пытался добавить функции отмены/повтора в свою программу. Однако я не могу "отменить" то, что я сделал. Поэтому у меня возникла идея сохранить копии моего BufferedImage
каждый раз при запуске события mouseReleased
. Однако с некоторыми изображениями, имеющими разрешение 1920x1080, я решил, что это будет неэффективно: их хранение, вероятно, займет гигабайт памяти.
Причина того, почему я не могу просто нарисовать одно и то же с цветом фона для отмены, состоит в том, что у меня есть много разных кистей, которые нарисованы на основе Math.random()
, и потому что существует много разных слоев (в одном слое).
Затем я рассмотрел клонирование объектов Graphics
, которые я использую для рисования в BufferedImage
. Вот так:
ArrayList<Graphics> revisions = new ArrayList<Graphics>();
@Override
public void mouseReleased(MouseEvent event) {
Graphics g = image.createGraphics();
revisions.add(g);
}
Я не делал этого раньше, поэтому у меня есть пара вопросов:
- Разве я все равно буду тратить бессмысленную память, делая это, например клонирование моего
BufferedImages
? - Есть ли другой способ, которым я могу это сделать?