Как вы говорите, текущие возможности основного изображения немного ограничены по прошивке. В частности, отсутствие пользовательских ядер, как вы находите на рабочем столе, разочаровывает. Другие альтернативы, которые вы перечисляете (за исключением GLImageProcessing, которые не могли бы выполнять такую фильтрацию), являются библиотеками, привязанными к процессору, и будут слишком медленными, если вы выполняете прямую фильтрацию на мобильном устройстве.
Однако я могу указать вам на фреймворк с открытым исходным кодом под названием GPUImage, который я только что выкатил, потому что не мог найти что-то, что позволит вам снять пользовательские эффекты. Как видно из названия, GPUImage выполняет GPU-ускоренную обработку неподвижных изображений и видео с использованием шейдеров OpenGL ES 2.0. Вы можете написать свои собственные пользовательские эффекты, используя их, чтобы вы могли делать все, о чем можете подумать. Сама инфраструктура - Objective-C и имеет довольно простой интерфейс.
В качестве примера искажения фильтра, следующим шейдер (на основе кода в Danny Pflughoeft's answer) делает своего рода эффект рыбьим:
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
const mediump float bulgeFactor = 0.5;
void main()
{
mediump vec2 processedTextureCoordinate = textureCoordinate - vec2(0.5);
mediump float radius = processedTextureCoordinate.x * processedTextureCoordinate.x + processedTextureCoordinate.y * processedTextureCoordinate.y;
mediump vec2 distortedCoordinate = vec2(pow(radius, bulgeFactor)) * processedTextureCoordinate + vec2(0.5);
gl_FragColor = texture2D(inputImageTexture, distortedCoordinate);
}
Это производит такой эффект на видеопотока:
В моих тестах, GPUImage обрабатывает изображения в 4 раза быстрее, чем ядра изображения на iPhone 4 (6X быстрее, чем CPU переплете обработки) и видео 25X быстрее, чем основное изображение (70x быстрее, чем на CPU). Даже в худшем случае я мог бы наброситься на него, он соответствует Core Image для скорости обработки.
Рамка по-прежнему довольно новая, поэтому количество фильтров запаса, которые у меня есть сейчас, невелико, но я скоро добавлю кучу. В то же время вы можете создавать собственные собственные искажающие шейдеры для обработки ваших изображений, а исходный код для всего доступен для вас по мере необходимости. My introductory post about it содержит более подробную информацию о том, как использовать это в ваших приложениях.
Раньше я использовал ImageMagick, и это было немного хлопот, когда он стал «правильным» для нашего продукта OS X, но в конце концов он того стоил. К сожалению, у меня больше нет этого файла makefile, поэтому я не могу дать его вам. –
Если вы хотите использовать одну из этих библиотек, вам придется потратить время, чтобы изучить язык, на котором он написан. Возможно, я не понимаю ваш вопрос. –
Спасибо за ответы, ребята, просто не то, что я хотел услышать :(Глупый Apple за то, что у этих фильтров еще нет доступных разработчиков! –