2012-04-06 13 views
0

ich ein JPG-Bild mit einem runden Objekt in einem rect haben und will die envoirement des runden Objekts transparent machen ...iOS: Inverse UIBezierPath (bezierPathWithOvalInRect)

Example

(Entfernen von rotem Bereich in Dieses Beispiel)

Mit Hilfe dieser iOS make part of an UIImage transparent und "UIBezierPath bezierPathWithOvalInRect" habe ich ein wenig Erfolg, aber das machen einen Pfad um mein Objekt, und ich muss es umkehren, um das Äußere und nicht das Innere zu machen des Weges transparent.

Im nicht sicher, wo ich das richtige Ergebnis erhalten muss meinen Code ändern ..

Hier ist mein Code:

//BezierPath 
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)]; 

// Create an image context containing the original UIImage. 
UIGraphicsBeginImageContext(_imgTemp.image.size); 
[_imgTemp.image 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,self._imgTemp.image.size.width,self._imgTemp.image.size.height)); 

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

Wer die Lösung wurde?

+0

Wollen Sie nur die rote machen transparent oder schwarz transparent geworden? –

Antwort

9

nur innerhalb des schwarzen Kreises ziehen Sie [_imgTemp.image drawAtPoint:CGPointZero]; zu nach CGContextClip(context); und entfernen Sie den CGContextClearRect(...) Anruf vollständig bewegen sollte:

//BezierPath 
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)]; 

// Create an image context containing the original UIImage. 
UIGraphicsBeginImageContext(_imgTemp.image.size); 

// Clip to the bezier path and clear that portion of the image. 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextAddPath(context,bezierPath.CGPath); 
CGContextClip(context); 

// Draw here when the context is clipped 
[_imgTemp.image drawAtPoint:CGPointZero]; 

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

Hey, das funktioniert total, danke für deine schnelle Antwort !! – Jones123

+0

Es ist möglich, den aktuellen Kontext mit '[bezierPath addClip]' an einen UIBezierPath zu hängen, so dass Sie nicht direkt mit 'CGContextRef' herumspielen müssen. – Dondragmer

+0

perfekt. ;) Vielen Dank –