iPhone. Мне нужно прикасаться к каждому полноэкранному пикселю со скоростью 30 кадров в секунду. Выполнимо? - PullRequest
2 голосов
/ 22 декабря 2009

Я заинтересован в создании приложений для взлома изображений. Чтобы лучше понять ожидаемую производительность, кто-нибудь может дать мне представление о том, как прикасаться к каждому пикселю в полноэкранном разрешении?

Типичный вариант использования: пользователь извлекает фотографию из фотоальбома, выбирает визуальный эффект и, в отличие от фильтра Photoshop, манипулирует устройством с помощью жестов, управляя эффектом в реальном времени.

Я просто ищу приблизительные номера исполнения здесь. Очевидно, что чем интенсивнее мои вычисления, тем больше лагов я могу ожидать.

Ура, Дуг

Ответы [ 5 ]

2 голосов
/ 22 декабря 2009

Для этого вам нужно хорошо знать OpenGL. Аппаратное обеспечение iPhone OpenGL ES имеет явное преимущество перед многими настольными системами в том, что в нем есть только одно место для памяти - поэтому текстуры не нужно «загружать на карту». Есть способы получить доступ к памяти текстуры напрямую.

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

Также скомпилируйте и запустите пример кода GLImageProcessing.

1 голос
/ 22 декабря 2009

Одна вещь, которая будет иметь большое значение, если вы собираетесь делать это с разрешением устройства или с разрешением самой фотографии. Как правило, фотографии, переданные из iTunes, масштабируются до 640x480 (в 4 раза больше пикселей по сравнению с экраном). Снимки с камеры будут больше - до 3Mpix для фотографий 3GS.

Я только немного поиграл с этим, но делал это очевидным образом - то есть CGImage, поддерживаемый массивом в вашем коде - вы могли видеть в диапазоне 5-10 FPS. Если вы хотите что-то более отзывчивое, вам нужно придумать более креативное решение. Может быть, отобразить изображение как текстуры на сетке точек и визуализировать с помощью OpenGL?

Найдите FaceGoo в App Store. Это пример приложения, которое использует простой цикл рендеринга OpenGL, чтобы сделать что-то похожее на то, о чем вы говорите.

0 голосов
/ 22 декабря 2009

Я начинаю думать, что единственный способ добиться этого - написать набор вершинных / фрагментных шейдеров и сделать все это в OpenGL ES 2.0. Я бы предпочел не брать на себя ограничения по ограничению приложения для iPhone 3GS, но я думаю, что это единственный жизнеспособный путь.

Я действительно надеялся, что есть какой-то подход CoreGraphics, который сработает, но это не так.

Спасибо, Дуг

0 голосов
/ 22 декабря 2009

Мой ответ - просто подождать, пока они не избавятся от устройств openGL 1.0 и, наконец, перенесут Core Image в iphone SDK.

С шейдерами Fragment это очень выполнимо на новых устройствах.

0 голосов
/ 22 декабря 2009

Не выполнимо, не с текущими API и универсальным фильтром изображения. В настоящее время вы можете получить доступ к экрану только через OpenGL или более поздние абстракции, и OpenGL не очень подходит для операций с кадровым буфером. (Конечно, не реализация OpenGL ES на iPhone.) Если вы меняете изображение каждый кадр, вам нужно загрузить новые текстуры, что слишком дорого. На мой взгляд, единственное решение - сделать эффекты на GPU, используя операции OpenGL над текстурой.

...