![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.11.2007
Сообщений: 49
|
![]()
Народ, просьба поделитесь ссылками или подскажите как сделать межанизм undo - redo при работе с Bitmap'ом.
|
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 30.04.2007
Сообщений: 1,307
|
![]()
Всё же мне кажется, придётся сохранять Ваш BMP во временный файл, лимит, - ну хотя бы 5, лучше 10.
Для отмены действий просто загружаешь предидуший временный файл, но т.к. это тоже является изменением, перед загрузкой нужно сохрагить в последующий файл, - для повтора действий. Если достигнуто (к примеру) TMPBMP10.bmp, то TMPBMP1.bmp удалить, а на его место записать как бы TMPBMP11.bmp. В цикле "счётчике" организовать предел от 1 - 10. Примерно так. Код:
Всё гениальное - просто!
![]() Последний раз редактировалось Air; 13.03.2008 в 08:52. |
![]() |
![]() |
![]() |
#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. |
|
![]() |
![]() |
![]() |
#4 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
По идее-то, сохранять желательно только сами изменения, а при ундо применять их вторично по ХОR.
Тогда значительно меньше памяти понадобится. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 266
|
![]()
А чтобы отловить изменения, надо каждый цвет сравнивать?
Типа две матрицы, одна boolean, другая color, если цвет[i,j] одной матрицы не равнен цвету[i,j] другой матрицы, то boolean[i,j]= true и в color[i,j] = измененный цвет (пиксель) |
![]() |
![]() |
![]() |
#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. |
||
![]() |
![]() |
![]() |
#7 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]() Цитата:
Ундо - сделал Visible:=False для Image2, Редо - вернул видимость. Нечто вроде слоев... И сравнивать ничего не надо. |
|
![]() |
![]() |
![]() |
#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)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
#9 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Дык на прозрачной (Transparent:=True) канве и рисовал.
Занимает, только он же почти пустой и занимает немного. Последний раз редактировалось mihali4; 14.03.2008 в 19:07. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Undo, Redo | Xardas | Общие вопросы Delphi | 1 | 24.01.2008 19:35 |