2013-03-11 1 views
0

Я рассматриваю возможность создания приложения, которое сильно использовало бы функцию заливки заливки/заливки. Изображения, которые я бы раскрашивал, просто как страницы раскраски; белый фон, черные границы. Я обсуждаю, что лучше использовать UIImage (путем манипуляции данными с пикселями) или рисовать изображения с помощью Core Graphics и изменять цвет заливки при касании.iOS FloodFill: UIImage vs Core Graphics

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

С CoreGraphics, я понятия не имею, как рассчитать, какую форму заполнить, когда пользователь касается области, а затем фактически заполняет эту область. Я посмотрел, но я не нашел успешного поиска.

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

Мысли? Полегче со мной! Это мое первое приложение и первый вопрос SO;)

+0

https://github.com/Chintan-Dave/UIImageScanlineFloodfill – CRDave

ответ

1

Я бы предложил использовать Core Graphics.

Вместо изображений определите фигуры с помощью CGPath или NSBezierPath и используйте Core Graphics, чтобы погладить и/или заполнить фигуры. Заполнение фигур так же просто, как переключение режима рисования от простого поглаживания до поглаживания и наполнения.

Создание еще более сложных форм значительно упрощается с помощью приложения PaintCode (которое позволяет рисовать и создавать код пути для вас).

Как ваше первое приложение, я бы предложил что-то с немного меньшей пользовательской графикой.

+0

Определенно. Тем не менее, CGImageRef с растровым контекстом также будет возможен. Изменение байтов напрямую было бы быстрым. Используя 'UIImage' для чего-то другого, статические изображения или сохранение результирующего файла были бы ужасны с точки зрения перспективы. – Sulthan

+0

спасибо fzwo и Sulthan. я думал, что с использованием CoreGraphics и чего-то вроде PaintCode каждое «изображение» представляет собой класс для себя, а это означает, что всякий раз, когда я добавляю новые изображения в приложение, мне нужно будет перестроить и переупаковать в качестве обновления, не так ли? используя растровые изображения над векторами, я мог бы динамически импортировать их в приложение, используя специальный API, который извлекал новые изображения. Султан, я планирую использовать UIImage только для статических изображений. Я сделал прототип преобразования uiimage в cgimageref, манипулируя пикселями и подключая битмап-контекст обратно к uiimage. это то, что вы имели ввиду? –

+0

Возможно, вы можете загрузить XML, JSON или другой описательный файл, содержащий точки и контрольные точки, для создания «NSBezierPath» с сервера без необходимости обновления приложения. Я не уверен, что если это может противоречить любым рекомендациям, которые Apple имеет для магазина, которые запрещают загрузку «исполняемых» данных, поэтому, если вы хотите пойти по этому маршруту, лучше спросите об этом Apple Dev Forums. – fzwo