Как применять фильтры Core Image по одному, чтобы сэкономить потребление памяти?

Когда вы применяете к изображению несколько фильтров Core Image, память может быстро стать ограничивающим фактором (что часто приводит к сбою приложения). Поэтому мне было интересно, какой хороший подход - добавлять по одному фильтру за раз и ждать завершения каждой операции.

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

Короче говоря, как мне применить один фильтр за раз и получить уведомление о завершении операции, чтобы я мог применить следующий фильтр к следующему эскизу?


person Bart Jacobs    schedule 17.03.2012    source источник
comment
Сбой происходит при предварительном просмотре эскизов или при обработке конечного изображения? Похоже на первое, так что можете ли вы уменьшить изображение и использовать исходное изображение меньшего размера для ввода в ваши фильтры основного изображения?   -  person Brad Larson    schedule 20.03.2012
comment
Спасибо за ответ, Брэд. Я закончил тем, что сделал это, но когда я загружаю кучу миниатюр, это занимает довольно много времени, прежде чем они загружаются. Отображение индикатора активности для каждой миниатюры — хорошее начало, чтобы сообщить пользователю, что что-то происходит, но пользовательский интерфейс не отвечает, пока CI выполняет свою работу.   -  person Bart Jacobs    schedule 20.03.2012
comment
Является ли узким местом операция изменения размера Core Graphics или обработка Core Image? Если основной образ, могу ли я предложить возможную альтернативу: github.com/BradLarson/GPUImage? Для неподвижных изображений я вижу 4-кратное улучшение производительности фильтрации по сравнению с Core Image на iPhone 4. Если мне не хватает нужного вам фильтра, сообщите мне, и я, возможно, смогу быстро его добавить.   -  person Brad Larson    schedule 20.03.2012
comment
Это очень впечатляет, Бред, особенно тесты по сравнению с CI. У меня есть два вопроса по этому поводу. (1) Является ли включение проекта GPUImage лучшим способом включения GPUImage? (2) Почему существует верхний предел размера изображения (в настоящее время 2048 пикселей)? Большое спасибо.   -  person Bart Jacobs    schedule 22.03.2012
comment
Встраивание проекта в соответствии с инструкциями, которые у меня есть на GitHub, — это, вероятно, самый простой способ реализовать это. Мы попробовали несколько различных подходов с Core Plot, и это всегда казалось самым простым для библиотек iOS. Верхний предел в 2048 пикселей предназначен для более старых устройств (не для iPad 2, iPad 3 и iPhone 4S, которые могут работать с 4096x4096), потому что это максимальный размер текстуры для графических процессоров на этих устройствах. Мне нужно реализовать механизм листов для управления изображениями большего размера.   -  person Brad Larson    schedule 22.03.2012
comment
У меня есть последний вопрос относительно GPUImage. Основываясь на информации на странице GitHub, означает ли это, что GPUImage не может обработать изображение, снятое на iPhone 4? Последний имеет 5-мегапиксельную камеру, что означает, что он превышает границу в 2048 пикселей, установленную для устройств до iPhone 4S. Я полагаю, что разделение изображения на несколько плиток и применение каждого фильтра к каждой плитке является возможным обходным путем для этого ограничения.   -  person Bart Jacobs    schedule 23.03.2012
comment
Нет, в настоящее время он не может обрабатывать полное разрешение неподвижной фотографии, сделанной на iPhone 4 (это одна из причин, по которой у меня еще нет входа для неподвижной камеры в качестве прямого источника). Даже Core Image переходит к обработке с привязкой к ЦП для изображений размером более 2048, хотя я хочу использовать плитки, которые для этого сшиваются вместе. Я полагаю, что мог бы немного понизить разрешение с 2592 x 1936 до 2048 x 1530, но я бы предпочел иметь решение для исходного разрешения изображений.   -  person Brad Larson    schedule 23.03.2012