Я работаю над приложением iOS, где пользователь может применить определенный набор фильтров фотографий. Каждый фильтр в основном состоит из действий Photoshop с определенными параметрами. Это действия:
- Настройка уровней
- Яркость/Контраст
- Оттенок/Насыщенность
- Одиночное и множественное наложение
Я повторил все эти действия в своем коде, используя арифметические выражения, которые проходят через все пиксели в изображении. Но когда я запускаю свое приложение на iPhone 4, для каждого фильтра требуется около 3-4 секунд, что довольно долго для ожидания пользователя. Размер изображения составляет 640 x 640 px, что составляет @2x моего размера, потому что он отображается на дисплее Retina. Я обнаружил, что моя главная проблема - это модификации уровней, которые каждый раз вызывает функцию pow() C, когда мне нужно настроить гамму. Конечно, я использую поплавки, а не двойные, потому что ARMv6 и ARMv7 медленны с удвоениями. Попробовал включить и отключить Thumb и получил тот же результат.
Пример простейшего фильтра в моем приложении, который выполняется довольно быстро, хотя (2 секунды). Другие фильтры включают больше выражений и вызовы pow(), что делает их медленными.
https://gist.github.com/1156760
Я видел некоторые решения, которые используют преобразования матриц VDSP Accelerate Framework для быстрой модификации изображений. Я также видел решения OpenGL ES. Я не уверен, что они способны удовлетворить мои потребности. Но, вероятно, это просто вопрос перевода моего набора изменений в какую-нибудь хорошую матрицу свертки?
Любой совет будет полезен.
Спасибо,
Андрей.