Хочу написать свой пейнт на андроид. Основные требования - функционал, как у стандартного MS-овского со слоями, скорость и разумное потребление памяти.
Для этого наверняка понадобятся какие-то заумные алгоритмы, особенно если речь идёт о ресурсоёмких особенностях, вроде заливки больших областей, хранения в памяти крупных изображений, слоёв и хранение предыдущих действий для отмены/возврата.
Кто-нибудь может подбросить статейку?
Java
Paint. Применяемые алгоритмы и структуры данных.
Структуры данных и алгоритмы служат теми материалами, из которых строятся программы. ..Структуры данных, применяемые в алгоритмах, могут быть чрезвычайно сложными.
Алгоритмы и структуры данных Вычислительная сложность Вычислительная сложность — … ...Структуры данных обеспечивают возможность использования того или иного алгоритма.
study-and-dev.com›blog/sda_theory_intro/
Алгоритмы и структуры данных Вычислительная сложность Вычислительная сложность — … ...Структуры данных обеспечивают возможность использования того или иного алгоритма.
study-and-dev.com›blog/sda_theory_intro/
Сфу Иси
Не совсем то. Я имел в виду примерно те, которые могут применяться при реализации вышеописанных возможностей.
учитесь гуглить и будете находить себе десятки разных статеек.
заливка замкнутой области - это floodfill называется. действительно алгоритм не самый простой - пробуйте разные варианты, сравнивайте, изучайте, пишите сами...
слои и хранение действий - делаются очень просто. для этого нужно, чтобы изображение в памяти хранилось не в виде Bitmap (который, ессно, слоев не поддерживает) - а в векторном виде, т. е. коллекция объектов в том порядке, в каком они созданы юзером (скажем наследников класса Shape - объекты классов Rectangle, Ellipse, Circle, Line и т. д.) а при отрисовке уже так или иначе визуализировались эти объекты.
одного этого достаточно, чтобы снизить потребление ОЗУ (а то прикиньте, если для undo каждый этап хранить отдельной картинкой целиком) - любой вектор всегда легче растра, тем более точечного, и чем больше размер картинки - тем больше разница.
и со слоями и undo проблем нет - undo - просто удаляем из коллекции последний объект - и все.
заливка замкнутой области - это floodfill называется. действительно алгоритм не самый простой - пробуйте разные варианты, сравнивайте, изучайте, пишите сами...
слои и хранение действий - делаются очень просто. для этого нужно, чтобы изображение в памяти хранилось не в виде Bitmap (который, ессно, слоев не поддерживает) - а в векторном виде, т. е. коллекция объектов в том порядке, в каком они созданы юзером (скажем наследников класса Shape - объекты классов Rectangle, Ellipse, Circle, Line и т. д.) а при отрисовке уже так или иначе визуализировались эти объекты.
одного этого достаточно, чтобы снизить потребление ОЗУ (а то прикиньте, если для undo каждый этап хранить отдельной картинкой целиком) - любой вектор всегда легче растра, тем более точечного, и чем больше размер картинки - тем больше разница.
и со слоями и undo проблем нет - undo - просто удаляем из коллекции последний объект - и все.
Похожие вопросы
- Java, алгоритмы и структуры данных.
- Как назвается структура данных в программировании (C#), где доступ к каждому элементу осуществляется по имени?
- Сложность алгоритмов. Теория алгоритмов. Программирование
- Должен ли начинающий программист понимать все алгоритмы сразу ?
- Калькулятор работает за счет Булевой логики. Вопрос -как? Как устроен алгоритм. Я не понимаю.
- Какие алгоритмы нужно знать для создания простой карточной игры на java?
- Вы алгоритмы наизусть знаете или копипасты достаточно?
- Если я буду знать очень хорошо C#, алгоритмы, SQL, и др. вроде умения пользоваться ПК, средой, я хороший прогер?
- Сколько времени займет на JAVA выполнение такого алгоритма?
- Зачем кэшировать базы данных?