Поддерживаете большое количество слоев в редакторе изображений? - PullRequest
2 голосов
/ 18 января 2011

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

Моя текущая идея:

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

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

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

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

1 Ответ

0 голосов
/ 04 февраля 2011

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

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

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

...