2011-01-18 3 views
2

Я пишу программу, подобную фотошопу, для мобильного устройства, и я хочу поддерживать использование слоев. В лучшем случае я могу хранить около 7 бит-карт в памяти за раз. Я пытаюсь понять, могу ли я придумать способ поддержки множества слоев (например, 10 или 20), не используя много памяти.Поддерживает большое количество слоев в редакторе изображений?

Моя текущая идея заключается в том:

  • Используйте один растровый в качестве активного слоя, который пользователь может в настоящее время подрисовать и манипулировать ими.
  • Используйте одно растровое изображение, в котором хранится сплющенная версия всех слоев под активным слоем.
  • Используйте одно растровое изображение, которое хранит сплющенную версию всех слоев над активным слоем.

Когда слой не является активным слоем, я могу записать его на диск и удалить его из памяти. Когда пользователь переключает активный слой, я затем извлекаю слой с диска и воссоздаю сплющенные изображения.

Эта идея кажется звуковой, если на каждом уровне есть только параметры непрозрачности, но я не думаю, что она будет работать, если слои могут иметь разные режимы смешивания, такие как экран и умножать. Сплюснутые нижние слои будут работать нормально, но кажется, что мне нужно будет повторно перенести все верхние слои снова, если один из них использовал режим наложения и активный слой был изменен.

Какой подход я могу использовать? Я видел различные программы рисования, поддерживающие 100 и более слоев, поэтому для этого должен быть какой-то трюк.

ответ

0

Ну, я думаю, что у вас уже есть разумный подход для случая, когда слои имеют простоту непрозрачности, но я вижу проблему, если у них разные режимы смешивания.

Одно из предложений может заключаться в том, чтобы нарезать изображение на подблоки, например. 32x32, и только повторно смешивать те, где что-то изменилось. У вас может быть своего рода кеш-память субблоков в основной памяти, так что если пользователь редактирует только небольшой регион, у вас есть данные, которые вам нужны большую часть времени. Это было бы сложно, но вы все равно могли бы удерживать смежные слои, для которых требуется только непрозрачность, чтобы потенциально повысить производительность.

Я, кажется, помню, что Photoshop, по крайней мере, использовал это - у них могла быть иерархия, но изображение было разделено на блоки.

+0

Спасибо, это интересная идея! – rbcc

Смежные вопросы