предложение относительно возможности сохранения состояний отмены повторения при редактировании изображений - PullRequest
0 голосов
/ 18 августа 2011

Я занимаюсь разработкой приложения для редактирования изображений на Java, которое, конечно же, потребует отмены повторного выполнения.Что я сделал .... Создал класс State, который будет содержать изображение с буферизацией, ref to prev state, ref to next state.Затем сформировали связанный список состояний, перемещаясь назад и вперед с помощью нажатий кнопок отмены и возврата.Итак, что я хочу ... Я заметил, что изображение в буфере занимает слишком много памяти ... скажем, 4 МБ только для изображения среднего размера (для рабочего стола).Можете ли вы, люди, предложить лучший подход ???

Спасибо !!

1 Ответ

4 голосов
/ 18 августа 2011

Вы должны использовать шаблон Command вместо Шаблон Memento , если ваше состояние использует слишком много памяти.

У вас будет связанный список объектов UndoRedo, каждый из которых содержит достаточно информации, чтобы можно было выполнить либо команду отмены, либо команду повторения.

Вы можете по-разному организовать команды:

  • Имеет двунаправленные команды. Например, при изменении цвета пикселя операция должна содержать как исходный, так и новый цвет, чтобы команда могла выполняться в обоих направлениях.
  • Имеют две разные команды для каждого блока undoredo. Для некоторых команд, которые изменяют все на изображении (например, изменение масштаба или яркости, когда некоторая информация об исходном изображении теряется), вы должны сохранить как команду для повтора, так и команду для отмены. Если это полное изображение, объем памяти будет таким же, как у вас.
...