|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.03.2008, 20:15 | #1 |
Пользователь
Регистрация: 28.11.2007
Сообщений: 49
|
Undo-Redo
Народ, просьба поделитесь ссылками или подскажите как сделать межанизм undo - redo при работе с Bitmap'ом.
|
13.03.2008, 08:50 | #2 |
Участник клуба
Регистрация: 30.04.2007
Сообщений: 1,307
|
Всё же мне кажется, придётся сохранять Ваш BMP во временный файл, лимит, - ну хотя бы 5, лучше 10.
Для отмены действий просто загружаешь предидуший временный файл, но т.к. это тоже является изменением, перед загрузкой нужно сохрагить в последующий файл, - для повтора действий. Если достигнуто (к примеру) TMPBMP10.bmp, то TMPBMP1.bmp удалить, а на его место записать как бы TMPBMP11.bmp. В цикле "счётчике" организовать предел от 1 - 10. Примерно так. Код:
Всё гениальное - просто!
Последний раз редактировалось Air; 13.03.2008 в 08:52. |
14.03.2008, 14:11 | #3 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Вместо магазина - динамический массив битмапов (отличие массива - если надо, можно вытащить первый не вытаскивая все). Глубину как душе угодно, можно ограничить тремя а можно и всю историю изменений хранить, лишь бы памяти хватило. Памяти на битмап 24bit(true color) нужно: кол-во пикселей * 3 байта. Например битмап 800х600 займет (800*600)*3/1024/1024 = 1.37 МБ. Соответственно массив из десяти таких битмапов займет 13.7 МБ, и так далее. Сохранение нужно делать при отпускании кнопки мыши (если мышью какой нибудь инструмент применяешь) ну или по нажатию на кнопке/меню это у кого как, перед изменением.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 14.03.2008 в 14:17. |
|
14.03.2008, 14:36 | #4 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
По идее-то, сохранять желательно только сами изменения, а при ундо применять их вторично по ХОR.
Тогда значительно меньше памяти понадобится. |
14.03.2008, 18:24 | #5 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 266
|
А чтобы отловить изменения, надо каждый цвет сравнивать?
Типа две матрицы, одна boolean, другая color, если цвет[i,j] одной матрицы не равнен цвету[i,j] другой матрицы, то boolean[i,j]= true и в color[i,j] = измененный цвет (пиксель) |
14.03.2008, 18:33 | #6 | ||
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Цитата:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 14.03.2008 в 18:43. |
||
14.03.2008, 18:50 | #7 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Ундо - сделал Visible:=False для Image2, Редо - вернул видимость. Нечто вроде слоев... И сравнивать ничего не надо. |
|
14.03.2008, 18:58 | #8 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
А Image2 канвы не имеет и память не занимает?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
14.03.2008, 19:04 | #9 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Дык на прозрачной (Transparent:=True) канве и рисовал.
Занимает, только он же почти пустой и занимает немного. Последний раз редактировалось mihali4; 14.03.2008 в 19:07. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Undo, Redo | Xardas | Общие вопросы Delphi | 1 | 24.01.2008 19:35 |