Я пишу программу, похожую на фотошоп, для мобильного устройства и хочу поддерживать использование слоев. Максимум, я могу хранить около 7 битовых карт в памяти одновременно. Я пытаюсь понять, смогу ли я придумать способ поддержки множества слоев (например, 10 или 20), не используя много памяти.
Моя текущая идея:
- Использование одного растрового изображения в качестве активного слоя, на котором пользователь может рисовать и манипулировать.
- Используйте одно растровое изображение, в котором сохранена уплощенная версия всех слоев под активным слоем.
- Используйте одно растровое изображение, в котором хранится сплющенная версия всех слоев над активным слоем.
Когда слой не является активным, я могу записать его на диск и удалить из памяти. Когда пользователь переключает активный слой, я извлекаю слой с диска и воссоздаю сглаженные изображения.
Эта идея звучит хорошо, если каждый слой имеет только настройки непрозрачности, но я не думаю, что она будет работать, если слои могут иметь разные режимы наложения, такие как экран и умножение. Сглаженные нижние слои будут работать нормально, но мне кажется, что мне нужно было бы снова перерисовать все верхние слои, если один из них использовал режим наложения и активный слой был изменен.
Какой подход я могу использовать? Я видел различные программы рисования, поддерживающие 100 и более слоев, так что тут есть какая-то хитрость.