Исключая замаскированные области из заливки «Ведро с краской» на UIImage - PullRequest
1 голос
/ 23 декабря 2011

Я создаю приложение для iPhone, которое требует, чтобы некоторые изображения создавались очень специфическим способом.Проблема довольно сложна для объяснения, поэтому ниже приведена схема того, чего я пытаюсь достичь.По сути, я хочу заполнить «заливку» на UIImage (который будет PNG).Я предполагаю, что термин «ведро с краской» здесь будет приравниваться к оттенку?

После этого я хочу создать объект маски (который будет обновляемым и может состоять из нескольких фигур), а затем, когда я применю другой оттенок/ заливка ведра к исходному изображению, области, покрытые встроенной маской, не будут затронуты.По сути, это как намотать ленту вокруг объекта, нарисовать его, а затем удалить ленту.Как и было обещано, вот схема того, что я после.Важно отметить, что, хотя я здесь и использую крестик, в конце концов шаблоны могут быть довольно сложными и должны быть внутри PNG, а не созданы в коде.Спасибо за любую помощь, которую вы можете оказать!

Masking Flow

1 Ответ

0 голосов
/ 23 декабря 2011

Создайте свой крест (или любую другую фигуру) в виде черного изображения на белом фоне.Примените его к своему графическому контексту, используя CGContextClipToMask.Затем используйте CGContextFillRect, чтобы заполнить границы вашего контекста синим цветом.Примерно так должно это сделать:

CGRect bounds = your context bounds;
CGContextRef gc = your context;
UIImage *cross = [UIImage imageNamed:@"cross"];
CGContextSaveGState(gc); {
    CGContextClipToMask(gc, bounds, cross.CGImage);
    CGContextSetColorWithColor(gc, [UIColor blueColor].CGColor);
    CGContextFillRect(gc, bounds);
} CGContextRestoreGState(gc);
...