Производительность радиального градиента - Может ли OpenGL-ES улучшиться? - PullRequest
7 голосов
/ 12 октября 2010

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

На экране у меня есть ползунок для динамического увеличения / уменьшения радиального градиента. Я обнаружил, что производительность на симуляторе просто отличная, но на iPhone 3G или 3GS он намного медленнее перерисовывается при перемещении слайдера.

В настоящее время я использую CGContextDrawRadialGradient для рисования. Шаги, которые я выполняю для каждого перерисовки:

  1. Создание графического контекста: UIGraphicsBeginImageContext(size);
  2. Создать объект градиента: CGGradientCreateWithColorComponents
  3. Нарисуйте изображение (фотография загружена из библиотеки фотографий) в масштабе экрана: drawInRect
  4. Установить режим наложения наложения: CGContextSetBlendMode
  5. Нарисуйте градиент: CGContextDrawRadialGradient
  6. Создать UIimage из UIGraphicsGetImageFromCurrentImageContext ();
  7. UIGraphicsEndImageContext();
  8. Нарисуйте законченное изображение на экране: drawInRect.

Есть ли более быстрый способ рисовать? Возможно, используя OpenGL?

Будем благодарны за любые предложения / примеры кода.

Спасибо.

1 Ответ

1 голос
/ 22 октября 2010

Вот несколько идей, которые могут улучшить производительность
(при условии, что вы используете градиент для добавления виньетирования к изображению):

  • кэшируйте ваше изображение для рисования в CGLayer, который имеет тот же размер, что и вид, это позволяет избежать масштабирования каждый раз, когда вам нужно его нарисовать.
  • кэширует чертеж радиального градиента в другой CGLayer.
  • когда вам нужно показать результат :
    • Нарисуйте слой изображения
    • с последующей настройкой наложения
    • с последующим градиентным слоем
    • все в контекст рисования вида.
  • когда пользователь перемещает ползунок , вы можете:
    • перерисовать градиентный слой затем композицию.
    • перерисовать композицию при масштабировании слоя градиента, а когда пользователь отрывает палец от ползунка, перерисовать слой градиента, а затем снова составить.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...