Маскирование изображений позволяет разработчику создавать изображения произвольной формы. Маскирование изображений позволяет создавать более впечатлительные и менее скучные интерфейсы.
Давайте посмотрим на пример на картинке и сделаем маскирование для Mac и iOS.
Итак, создание маски – очень простая задача, используя Core Graphics. Следующая функция берет два изображения и использует одно для маскирования другого.
Для NSImage
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | - (NSImage*)maskImage:(NSImage *)image withMask:(NSImage *)myMaskImage { CGImageSourceRef imageSource; imageSource = CGImageSourceCreateWithData((CFDataRef)[image TIFFRepresentation], NULL); CGImageRef imageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL); CGImageSourceRef maskSource; maskSource = CGImageSourceCreateWithData((CFDataRef)[myMaskImage TIFFRepresentation], NULL); CGImageRef maskRef = CGImageSourceCreateImageAtIndex(maskSource, 0, NULL); CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), CGImageGetHeight(maskRef), CGImageGetBitsPerComponent(maskRef), CGImageGetBitsPerPixel(maskRef), CGImageGetBytesPerRow(maskRef), CGImageGetDataProvider(maskRef), NULL, false); CGImageRef masked = CGImageCreateWithMask(imageRef, mask); NSImage *maskedImage = [[NSImage alloc] initWithCGImage:masked size:CGSizeMake(CGImageGetWidth(masked), CGImageGetHeight(masked))]; return maskedImage; } |
Для UIImage
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | - (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 masked = CGImageCreateWithMask([image CGImage], mask); return [UIImage imageWithCGImage:masked]; } |
Все! Очень просто.
ВАЖНО: Маска не должна иметь никакой прозрачности!
Желаю удачи!