Sto lavorando con un'immagine in cui l'utente ha selezionato parte di essa utilizzando UIBezierPath. Come posso cancellare/cancellare/rendere trasparente tutto ciò che non fa parte di quella selezione?Clip UII iOS sui percorsi
11
A
risposta
20
Con un percorso è molto semplice. Basta impostare il percorso come il tracciato di ritaglio:
- (UIImage *)maskImage:(UIImage *)originalImage toPath:(UIBezierPath *)path {
UIGraphicsBeginImageContextWithOptions(originalImage.size, NO, 0);
[path addClip];
[originalImage drawAtPoint:CGPointZero];
UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return maskedImage;
}
Se si desidera utilizzare l'unione di più percorsi, è più difficile, perché al quarzo non ha funzioni che calcolano direttamente l'unione di due percorsi. Un modo è quello di riempire ogni percorso uno ad uno in una maschera, e quindi disegnare l'immagine attraverso la maschera:
- (UIImage *)maskedImage
{
CGRect rect = CGRectZero;
rect.size = self.originalImage.size;
UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0.0); {
[[UIColor blackColor] setFill];
UIRectFill(rect);
[[UIColor whiteColor] setFill];
for (UIBezierPath *path in self.paths)
[path fill];
}
UIImage *mask = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0); {
CGContextClipToMask(UIGraphicsGetCurrentContext(), rect, mask.CGImage);
[self.originalImage drawAtPoint:CGPointZero];
}
UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return maskedImage;
}
0
ho provato il codice di unione percorsi multipli, e non funziona.
In realtà, se l'unione di percorsi non si sovrappongono, si aggiunge un percorso a un altro e si ritaglia con il percorso finale.
UIGraphicsBeginImageContextWithOptions(originalImg.size, NO, 0);
[path1 appendPath:path2]; // append path2 to path1
[path1 addClip];
[originalImg drawAtPoint:CGPointZero];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Problemi correlati
- 1. Clip-path non funziona sui video
- 2. Clip iOS UIScrollViewToBounds = NO Sottoview non rilevato
- 3. Dove posso ottenere dati aggiornati sulle compagnie aeree, sui voli, sui percorsi e sui prezzi?
- 4. Imposta il titolo dell'icona della clip Web iOS predefinito?
- 5. Elementi con posizione: relativo ai percorsi di clip SVG non visualizzati in Safari
- 6. Problema potenziale con uno dei percorsi Oracle sui generici Java
- 7. L'hover del Css a volte non funziona sui percorsi svg
- 8. Creare un'immagine UII da un MKMapView
- 9. iOS: chiarire diversi percorsi di ricerca
- 10. Estensione app sui limiti iOS 8
- 11. Immagine di condivisione iOS sui social network
- 12. Clip SVGPercorso per ritagliare il contenuto * outer * fuori
- 13. Clip SVGPercorso e trasformazioni
- 14. OpenGL Near Clip Plane
- 15. Fatti sfocati nelle clip
- 16. Eclipse e scheda clip
- 17. CSS3 background-clip
- 18. Clip per tracciato disegnato
- 19. DirectX spazio clip tessitura coordinate
- 20. Animare la clip: proprietà rect?
- 21. Clip CSS e posizionamento assoluto
- 22. Variazione delle dimensioni di UII quando viene prelevata da UIImagePickerController
- 23. iOS - Trascinando gli oggetti lungo i percorsi curvi
- 24. iOS: unione di due percorsi tramite UIBezierPath appendPath
- 25. Protezione delle chiavi API sui client (JavaScript, Android, iOS, ecc.)
- 26. iOS: come condividere testo e immagini sui social network?
- 27. iOS supporta le operazioni sui file tramite SMB?
- 28. iOS Xcode: Avvisa sui metodi non nell'obiettivo minimo SDK
- 29. Modifica l'intonazione audio della clip registrata (m4v)
- 30. Come catturare screenshot da un video clip per 50 minuti nella clip e farlo velocemente?
Wow. Non avevo idea che fosse così facile. Stavo cercando nei posti sbagliati. Il ritaglio limita l'area di disegno, giusto? –
Huh, ho più nsbezierpaths, o se ho un nsbezierpath in cui i colpi sono uno sopra l'altro questo si fa fregare. –
Siamo spiacenti, questo in realtà non funziona. Ho più UIBezierPath che non rappresentano necessariamente le forme richieste dalla clip, ma le selezioni. Il ritaglio su più UIBezierPath che a volte sono uno sull'altro non restituisce l'immagine corretta. –