Подтвердить что ты не робот

IOS составляют часть прозрачного UIImage

У меня есть UIImage, где часть его была выбрана пользователем для очистки (сделать прозрачным). Чтобы сделать выбор, я использовал NSBezierPath.

Как я могу очистить/сделать прозрачную часть UIImage в iOS?

4b9b3361

Ответ 1

Во-первых, я предполагаю, что у вас UIBezierPath (iOS), а не NSBezierPath (Mac OS X).

Для этого вам нужно будет использовать основную графику, создать контекст изображения, нарисовать UIImage в этом контексте и затем очистить область, указанную NSBezierPath.

// Create an image context containing the original UIImage.
UIGraphicsBeginImageContext(originalImage.size);
[originalImage drawAtPoint:CGPointZero];

// Clip to the bezier path and clear that portion of the image.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddPath(context,bezierPath.CGPath)
CGContextClip(context);
CGContextClearRect(context,CGRectMake(0,0,originalImage.size.width,originalImage.size.height);

// Build a new UIImage from the image context.
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Ответ 2

Решение Swift4 от Landweber выше ответ:

UIGraphicsBeginImageContext(image!.size)
image!.draw(at: CGPoint.zero)
let context:CGContext = UIGraphicsGetCurrentContext()!;
let bez = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 10, height: 10))
context.addPath(bez.cgPath)
context.clip();
context.clear(CGRect(x: 0,y: 0,width: image!.size.width,height: image!.size.height));
let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!;
UIGraphicsEndImageContext();