Проблема со стиранием или прозрачным штрихом при использовании CoreGraphics framework

В одном из моих приложений я пытаюсь стереть / прозрачно обводить часть UIImage, которую я рисую с использованием инфраструктуры CoreGraphics (CGContextRef и т. Д.). В процессе я могу очистить рисунок за один раз, вызвав сообщение «removeAllObjects», но я не смог понять, как стереть часть рисунка. Гоша !! Я просидел весь день, но все равно безрезультатно, теперь это меня убивает. Пожалуйста, ребята, помогите мне отсюда. Короче говоря, мне нужно что-то вроде ластика, который может стереть часть моего рисунка. Ценю вашу помощь!!


person Manab    schedule 14.07.2010    source источник


Ответы (2)


Просто сделай CGContextSetBlendMode(context, kCGBlendModeClear)

Этот вызов изменяет режим наложения цветов таким образом, что операции рисования будут очищать растровое изображение вместо рисования с цветом.

Чтобы вернуться к нормальному рендерингу, выполните CGContextSetBlendMode(context, kCGBlendModeNormal)

Очень полезно использовать разные режимы наложения.

person Vlad Grichina    schedule 26.10.2011

Как правило, CGContext - это холсты, предназначенные только для добавления, то есть вы можете только добавить больше краски, но не удалить уже нанесенную на них краску. Если ваш холст изначально был белым, вы можете закрасить его белым, чтобы имитировать и стереть операцию.

Простым решением было бы вручную очистить области удаляемого растрового изображения.

Сложное решение - сохранить все операции рисования, введенные пользователем, и деформировать их в результате операции стирания (это также упростит добавление режима отмены)

Примечание. Существует функция CGContextClearRect, но обычно она работает должным образом только в контексте растровых изображений.

person rpetrich    schedule 14.07.2010
comment
Я пробовал с CGContextSetBlendMode, может, я иду в каком-то направлении, я просто не мог понять с этим. removeAllObjects вызывается, поскольку я использую NSMutableArray для сохранения объектов рисования в этом буфере, который я очищаю, вызывая сообщение removeAllObjects. В моем приложении есть три элемента панели вкладок: один для сохранения рисунка, второй - для очистки изображения, а третий - для очистки / стирания части рисунка (что-то вроде ластика в MSPaint), который я только что разместил здесь как мой запрос. Пожалуйста, помогите мне в этом, так как я все еще не очень хорош в @ CoreGraphics / 2D физике. - person Manab; 14.07.2010
comment
Или ваше первое решение для подделки и стирания, я могу попробовать. Честно говоря, у меня нет никаких предварительных знаний о CGContextClearRect, поэтому мне нужно больше узнать об этом в Google. - person Manab; 14.07.2010
comment
Лучше всего использовать CGBitmapContextCreate и предоставить свой собственный буфер поддержки - тогда вы можете изменить его напрямую, используя свой собственный код стирания. - person rpetrich; 14.07.2010