базовая модель для этого приложения не должно быть изображения. Это не вопрос «как мне создать одно изображение изображения из другого».
Вместо этого базовая объектная модель должна быть массивом путей. Затем, когда вы хотите создать изображение с прозрачными путями против непрозрачных путей, это просто вопрос о том, как вы создаете этот массив путей. Как только вы решаете его таким образом, проблема не является сложным вопросом манипулирования изображениями, а просто вопросом рендеринга.
Кстати, мне очень нравится эта модель массива путей, потому что тогда становится довольно тривиально делать такие вещи, как «gee, позвольте мне предоставить функцию отмены, позволяя пользователю удалять по одному штриху за раз». Это открывает вам всевозможные функциональные улучшения.
Что касается особенностей визуализации этих путей, он может быть реализован различными способами. Вы можете использовать пользовательскую функцию drawRect
для подкласса UIView
, который отображает пути с соответствующей альфой. Или вы можете сделать это с помощью CAShapeLayer
объектов. Или вы можете сделать несколько гибридов (создание новых снимков изображений при завершении добавления каждого пути, что избавит вас от необходимости повторно отображать все пути каждый раз). Существует множество способов решения этой проблемы.
Но главное понимание заключается в использовании в базовую модель массива путей, а затем рендеринга двух ваших типов изображений становится довольно тривиальной задачей:


Первое изображение является рендеринг пучка путей как CAShapeLayer
объектов с alpha
из 0,5. Второй - тот же рендеринг, но с alpha
1.0. Опять же, не имеет значения, используете ли вы слои формы или низкоуровневые вызовы Core Graphics, но основная идея такая же. Либо сделайте свои пути полупрозрачностью, либо нет.
приятный, просто нужна небольшая настройка, чтобы пиксели были черными: 'for (int i = 0; i
Halpo
При всем моем уважении я не думаю, что этот метод настройки пиксельного буфера исходного растрового изображения является правильным подходом. Это предполагает, что альфа-канал отражает просто непрозрачность линии. Но ваш обработанный путь может иметь сглаженные края; эта техника будет излишне вводить в маску зубцы. Я бы посоветовал не редактировать этот буфер пикселей. Вместо этого вы хотите повторно отобразить исходные пути вашей модели, используя альфа 1.0. Таким образом, ваша маска будет наслаждаться сглаженной природой краев, делая основной путь хода полностью непрозрачным. – Rob