Tôi muốn cắt một hình ảnh trong iOS dựa trên mặt nạ có hình dạng không đều. Tôi có thể làm cái này như thế nào?Làm cách nào để cắt hình ảnh dựa trên hình dạng không đều?
8
A
Trả lời
3
Tôi không chắc chắn bạn muốn cắt, nhưng thay vào đó bạn muốn che hình ảnh. Điều này là khá dễ dàng để làm nhưng cuối cùng bạn sẽ thấy rằng nó hoạt động cho một số hình ảnh và không phải những người khác. Điều này là do bạn cần có kênh alpha thích hợp trong hình ảnh.
Ở đây mã tôi sử dụng, mà tôi nhận được từ stackoverflow. (Problem with transparency when converting UIView to UIImage)
CGImageRef CopyImageAndAddAlphaChannel(CGImageRef sourceImage) {
CGImageRef retVal = NULL;
size_t width = CGImageGetWidth(sourceImage);
size_t height = CGImageGetHeight(sourceImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef offscreenContext = CGBitmapContextCreate(NULL, width, height,
8, 0, colorSpace, kCGImageAlphaPremultipliedFirst);
if (offscreenContext != NULL) {
CGContextDrawImage(offscreenContext, CGRectMake(0, 0, width, height), sourceImage);
retVal = CGBitmapContextCreateImage(offscreenContext);
CGContextRelease(offscreenContext);
}
CGColorSpaceRelease(colorSpace);
return retVal;
}
- (UIImage*)maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef sourceImage = [image CGImage];
CGImageRef imageWithAlpha = sourceImage;
//add alpha channel for images that don't have one (ie GIF, JPEG, etc...)
//this however has a computational cost
// needed to comment out this check. Some images were reporting that they
// had an alpha channel when they didn't! So we always create the channel.
// It isn't expected that the wheelin application will be doing this a lot so
// the computational cost isn't onerous.
//if (CGImageGetAlphaInfo(sourceImage) == kCGImageAlphaNone) {
imageWithAlpha = CopyImageAndAddAlphaChannel(sourceImage);
//}
CGImageRef masked = CGImageCreateWithMask(imageWithAlpha, mask);
CGImageRelease(mask);
//release imageWithAlpha if it was created by CopyImageAndAddAlphaChannel
if (sourceImage != imageWithAlpha) {
CGImageRelease(imageWithAlpha);
}
UIImage* retImage = [UIImage imageWithCGImage:masked];
CGImageRelease(masked);
return retImage;
}
Và bạn gọi nó như thế này:
customImage = [customImage maskImage:customImage withMask:[UIImage imageNamed:@"CircularMask.png"]];
Trong trường hợp này, tôi đang sử dụng một mặt nạ hình tròn để tạo ra một hình ảnh tròn. Bạn sẽ cần phải làm cho mặt nạ bất thường phù hợp với nhu cầu của bạn.
Các vấn đề liên quan
- 1. SVG - Làm thế nào để cắt ảnh thành hình tròn?
- 2. Làm cách nào để phát hiện đường viền không đều trong hình ảnh?
- 3. Làm cách nào để tạo một div có hình dạng không đều với css3 và html5?
- 4. Hình ảnh cắt ảnh Kinect
- 5. iPhone: -simplest cách để cắt hình ảnh mong muốn hình dạng và kích thước
- 6. Phát hiện một đối tượng trên hình ảnh dựa trên dạng hình học
- 7. Làm cách nào để lưu ImageView dưới dạng hình ảnh?
- 8. Làm thế nào để cắt một hình ảnh trong Android?
- 9. Làm thế nào để cắt một hình ảnh trong vb.net?
- 10. Cắt xén hình ảnh GWT
- 11. Làm thế nào để cắt một hình ảnh với một hình chữ nhật xoay?
- 12. Hình dạng hình bầu dục CSS cắt ra từ div
- 13. Làm cách nào để vẽ hình ảnh trên cửa sổ?
- 14. Cắt xén hình ảnh html5
- 15. Cắt hình dạng trong Silverlight2
- 16. Nhận dạng hình dạng php trong hình ảnh
- 17. Làm thế nào tôi có thể cắt một hình dạng bên trong hình dạng khác?
- 18. Không thể cắt hình ảnh bằng mini_magick
- 19. Cắt đường viền của hình ảnh dựa trên màu sắc trong cửa sổ điện thoại
- 20. làm thế nào để làm cho hình dạng không đều uiview và đặt uiimageview bên trong những hình dạng như instacollage iphone app
- 21. Cách cắt hình chữ nhật từ hình ảnh trong android
- 22. Làm thế nào để cắt UIImage trên hình bầu dục hoặc hình tròn?
- 23. Làm cách nào để thêm hình ảnh lên đầu hình ảnh khác?
- 24. Hiển thị HTML dưới dạng Hình ảnh
- 25. cắt dán hình ảnh trong PHP
- 26. Làm cách nào để định vị một hình ảnh trên một hình ảnh khác trong HTML?
- 27. kết hợp hai hình ảnh dựa trên độ alpha/độ trong của hình ảnh trên cùng
- 28. Làm cách nào để tạo Lớp trên Hình ảnh?
- 29. Làm cách nào để chụp màn hình hiện tại dưới dạng hình ảnh?
- 30. làm cách nào để vẽ một đường trên hình ảnh?
cảm ơn bạn đã phát lại nhưng vấn đề của tôi là khác. Tôi có 4 điểm khác nhau như hình thang. Người dùng cũng có thể thay đổi điểm này và tạo hình dạng theo phong cách riêng.Bây giờ tôi muốn cắt hình ảnh giống với hình dạng mà người dùng đã tạo draging point –
Bạn có thể lấy 4 điểm, đưa chúng lên mặt nạ, và sau đó sử dụng mã trên không? –
xin lỗi Tôi mới phát triển IOS.Tôi không thể hiểu được quan điểm của bạn. Ví dụ tôi có bốn điểm điểm đầu tiên của CGPoint, secondPoint, thirdPoint và fourthPoint của hình thang, sau đó làm thế nào tôi sử dụng mã ở trên Cảm ơn –