2014-08-29 1 views
2

Мы создаем приложение, которое работает с большим количеством изображений. Мы заинтересованы как в Core Image, GPUImage, так и в UIImage и как он распаковывает изображения. Мы уже знакомы с тем, что выполнение декомпрессии изображений на фоновом потоке поможет устранить заикание или дрожание в нашем пользовательском интерфейсе. Однако мы не очень хорошо знаем, где происходит эта декомпрессионная работа. Мы также делаем некоторые обрезки изображений, используя UIImage. Таким образом, здесь задаются вопросы:Декомпрессия с использованием GPUImage против Core Image vs UIImage?

Фон: Мы поддерживаем устройства вплоть до iPhone 4, но вскоре может отказаться от iPhone 4 в пользу iPhone 4S как самого старого устройства.

1) Является ли декомпрессия изображения, выполненного на графическом процессоре? ... Core Image? GPUImage? UIImage?

2) Можно ли обрезать изображение на графическом процессоре? ... Core Image? GPUImage? UIImage?

3) Есть ли разница в поддержке GPU на основе нашего профиля устройства?

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

ответ

4

Чтобы ответить на вопрос о декомпрессии: Core Image, GPUImage и UIImage используют практически то же самое средство загрузки изображения с диска. Для Core Image вы начинаете с UIImage, а для GPUImage вы можете видеть в the GPUImagePicture source, что в настоящее время он использует CGImageRef, обычно полученный через UIImage.

UIImage делает декомпрессию изображений на стороне процессора, а другие библиотеки, на которые я смотрел, улучшают производительность загрузки изображений для GPUImage, делают то же самое. Самое большое узкое место в GPUImage для загрузки изображений - загрузить изображение в UIImage, а затем совершить поездку через Core Graphics, чтобы загрузить его в текстуру. Я просматриваю более прямые способы получения данных пикселов, но все подпрограммы декомпрессии, которые я пробовал до настоящего времени, в конечном итоге замедляются, чем загрузка на основе UIImage.

Обрезка изображения может быть выполнена на графическом процессоре, и как Core Image, так и GPUImage позволяют вам это делать. С накладными нагрузками на загрузку изображений это может быть или не быть быстрее, чем обрезка с помощью Core Graphics, поэтому вам нужно будет сами оценить эти размеры изображения, о которых вы заботитесь. Более сложные операции обработки изображений, такие как настройка цвета и т. Д. generally end up being overall wins on the GPU for most image sizes on most devices. Если бы эта загрузка загрузки изображения могла быть уменьшена, обработка в GPU-стороне выиграла бы в большем количестве случаев.

Что касается возможностей графического процессора с классами устройств, существуют значительные различия в производительности между различными устройствами iOS, но возможности, как правило, в основном одинаковы. Производительность обработки шейдеров фрагмента может быть на порядок различной между устройствами iPhone 4, 4S, 5 и 5S, где для некоторых операций 5S 1000 раз быстрее, чем 4. У устройств A6 и A7 имеется несколько расширений, которые отсутствуют у более старых устройств , но они вступают в игру только в очень специфических ситуациях.

Наибольшее различие имеет тенденцию быть максимальным размером текстуры, поддерживаемым аппаратным обеспечением графического процессора, с iPhone 4 и более ранними устройствами, имеющими размеры до 2048x2048 текстур и iPhone 4S и выше, поддерживающие текстуры 4096x4096. Это может ограничить размер изображений, которые могут обрабатываться на графическом процессоре, используя что-то вроде GPUImage.

+0

@Tommy - Я знаю, что «измельченные» PNG от Apple имеют преимущества производительности, потому что у них есть встроенные ускорения для вытаскивания их, но я не уверен в обобщенном случае. Я знаю, что были некоторые интересные эксперименты с различными форматами файлов для оптимизации скорости извлечения: https://github.com/gameclosure/gcif.Не потратили столько времени на это, как я должен, учитывая, насколько узким местом для многих приложений. –

Смежные вопросы