Получение лучшей производительности
И на iOS и на OS X, Базовое Изображение предоставляет много возможностей для создания изображений, контекстов и рендеринга содержания. То, как Вы принимаете решение выполнить задачу, зависит от:
Как часто Ваше приложение должно выполнить задачу
Работает ли Ваше приложение с неподвижными изображениями или видеоизображениями
Необходимо ли поддерживать обработку в режиме реального времени или анализ
Как важная цветная точность Вашим пользователям
Необходимо перечитать по методам наиболее успешной практики производительности для обеспечения выполнения приложения максимально эффективно.
Методы наиболее успешной практики производительности
Следуйте за этими методами для лучшей производительности:
Не создавайте a
CIContext
возразите каждый раз, когда Вы представляете.Контексты хранят большую информацию состояния; более эффективно снова использовать их.
Оцените, нужно ли Вам приложение управление цветом. Не используйте его, если Вам не нужен он. Посмотрите, что для Вашего Приложения Нужно управление цветом?.
Избегите Базовых анимаций Анимации при рендеринге
CIImage
объекты с контекстом GPU.Если необходимо использовать обоих одновременно, можно установить обоих для использования CPU.
Удостоверьтесь, что изображения не превышают пределы GPU и CPU. (iOS)
Размер изображения ограничивает для
CIContext
объекты отличаются в зависимости от того, использует ли Базовое Изображение CPU или GPU. Проверьте предел на iOS при помощи методовinputImageMaximumSize
иoutputImageMaximumSize
.Пользователь меньшие изображения, если это возможно.
Производительность масштабируется с числом выходных пикселей. У Вас может быть Базовый рендеринг Изображения в меньшее представление, текстуру или кадровый буфер. Позвольте Базовой Анимации увеличивать масштаб для отображения размера.
Используйте Базовую Графику или Изображение функции I/O, чтобы обрезать или субдискретизировать, такие как функции
CGImageCreateWithImageInRect
илиCGImageSourceCreateThumbnailAtIndex
.UIImageView
класс работает лучше всего со статическими изображениями.Если Ваше приложение должно получить лучшую производительность, используйте APIs низшего уровня.
Избегите ненужных передач текстуры между CPU и GPU.
Рендеринг к прямоугольнику, который является тем же размером как исходное изображение прежде, чем применить масштабный коэффициент содержания.
Рассмотрите использование более простых фильтров, которые могут привести к результатам, подобным алгоритмическим фильтрам.
Например, CIColorCube может произвести вывод, подобный CISepiaTone, и сделать так более эффективно.
Используйте в своих интересах поддержку YUV-изображения в iOS 6.0 и позже.
Пиксельными буферами камеры является исходно YUV, но большинство алгоритмов обработки изображений ожидает данные RBGA. Существует стоимость для преобразования между двумя. Базовые поддержки Изображения, читая YUB из
CVPixelBuffer
объекты и применение надлежащего преобразования цвета.options = @{ (id)kCVPixelBufferPixelFormatTypeKey :
@(kCVPixelFormatType_420YpCvCr88iPlanarFullRange) };
Для Вашего приложения нужно управление цветом?
По умолчанию Базовое Изображение применяется, все просачивается легкое линейное цветовое пространство. Это обеспечивает самые точные и непротиворечивые результаты.
Преобразование в и от sRGB добавляет к сложности фильтра и требует, чтобы Базовое Изображение применило эти уравнения:
rgb = mix(rgb.0.0774, pow(rgb*0.9479 + 0.05213, 2.4), step(0.04045, rgb)) |
rgb = mix(rgb12.92, pow(rgb*0.4167) * 1.055 - 0.055, step(0.00313, rgb)) |
Рассмотрите управление цветом отключения если:
Для Вашего приложения нужна абсолютная самая высокая производительность.
Пользователи не заметят качественных различий после преувеличенных манипуляций.
Для отключения управления цветом установите kCIImageColorSpace
ключ к null
. При использовании контекста EAGL также установите цветовое пространство контекста в null
когда Вы создаете контекст EAGL. Посмотрите Создание Базового Контекста Изображения на iOS Когда Вы Потребность Производительность В реальном времени.