मैं एक ऐसी छवि के साथ काम कर रहा हूं जहां उपयोगकर्ता ने UIBezierPath का उपयोग करके इसका हिस्सा चुना है। मैं उस चयन का हिस्सा नहीं है जो पारदर्शी सब कुछ हटा/साफ़ कर सकता/सकती हूं?पथों के लिए आईओएस UIImage क्लिप
11
A
उत्तर
20
एक पथ के साथ यह बहुत आसान है। बस कतरन पथ के रूप में पथ सेट:
- (UIImage *)maskImage:(UIImage *)originalImage toPath:(UIBezierPath *)path {
UIGraphicsBeginImageContextWithOptions(originalImage.size, NO, 0);
[path addClip];
[originalImage drawAtPoint:CGPointZero];
UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return maskedImage;
}
आप एक से अधिक पथ के मिलन का उपयोग करना चाहते हैं, तो यह मुश्किल है, क्योंकि क्वार्ट्ज किसी भी कार्य करता है कि सीधे दो रास्तों के मिलन की गणना नहीं है। एक तरह से प्रत्येक पथ एक मुखौटा में एक के बाद एक को भरने, और फिर मुखौटा के माध्यम से छवि आकर्षित करने के लिए है:
- (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
मैं संघ कई रास्तों में से कोड की कोशिश की, और यह काम नहीं करता।
दरअसल, यदि पथ का संघ एक-दूसरे के साथ ओवरलैप नहीं होता है, तो हम एक पथ को दूसरे रास्ते में जोड़ते हैं और अंतिम पथ के साथ फसल लगाते हैं।
UIGraphicsBeginImageContextWithOptions(originalImg.size, NO, 0);
[path1 appendPath:path2]; // append path2 to path1
[path1 addClip];
[originalImg drawAtPoint:CGPointZero];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
संबंधित मुद्दे
- 1. फेसबुक आईओएस एसडीके - UIImage
- 2. UIImage
- 3. आईओएस - घुमावदार पथों के साथ वस्तुओं को खींचना
- 4. UIImage
- 5. UIImage
- 6. UIImage
- 7. UIImage
- 8. UIImage
- 9. UIImage asynchronously
- 10. UIImage
- 11. UIImage
- 12. एक UIBezierPath को एनिमेट करें जो UIImage
- 13. डिफ़ॉल्ट आईओएस वेब क्लिप आइकन शीर्षक सेट करें?
- 14. क्लिप प्लेन के पास ओपनजीएल
- 15. UIImage: imageWithContentsOfFile आईओएस 5.0 में 10 गुना धीमा है
- 16. आईओएस 5 से पहले कैसे करें [UIImage resizableImageWithCapInsets:]?
- 17. AVFoundation कैप्चर UIImage
- 18. [UIImage imageNamed ...] और [UIImage imageWithData ...] के बीच अंतर?
- 19. UIImage गुणवत्ता के नुकसान के बिना आकार
- 20. एक UIImage
- 21. एक UIImage
- 22. iOS4 और पृष्ठभूमि [UIImage setImage:]
- 23. एक UIImage
- 24. एसवीजी पथों की गणना
- 25. आईओएस
- 26. UIImage फ्रेम
- 27. UIImage घुमाएं?
- 28. सीएसएस क्लिप कोनों?
- 29. क्लिप कॉपी/बफर
- 30. क्लिप क्लिप में 50 मिनट के वीडियो क्लिप से स्क्रीनशॉट कैप्चर कैसे करें और इसे तेज़ करें?
वाह। नहीं पता था कि यह इतना आसान था। मैं सभी गलत स्थानों में देख रहा था। क्लिपिंग ड्राइंग क्षेत्र को प्रतिबंधित करता है, है ना? –
हू, मेरे पास एकाधिक nsbezierpaths हैं, या यदि मेरे पास एक nsbezierpath है जहां स्ट्रोक एक दूसरे के शीर्ष पर हैं तो यह खराब हो जाता है। –
क्षमा करें, यह वास्तव में काम नहीं करता है। मेरे पास एकाधिक UIBezierPath है जो क्लिप को इच्छित आकारों का प्रतिनिधित्व नहीं करता है, लेकिन चयन। कई UIBezierPaths पर क्लिपिंग जो कभी-कभी एक दूसरे के ऊपर होती है, उचित छवि नहीं लौटाती है। –