Samouczek używa tej metody z dwoma parametrami: image
i maskImage
, które należy ustawić, wywołując metodę. Przykładowe wywołanie mogłoby wyglądać następująco, zakładając, że metoda jest w tej samej klasie, a obrazy znajdują się w Twoim pakiecie:
Uwaga - zdumiewające, że zdjęcia nie muszą nawet być tego samego rozmiaru.
...
UIImage *image = [UIImage imageNamed:@"dogs.png"];
UIImage *mask = [UIImage imageNamed:@"mask.png"];
// result of the masking method
UIImage *maskedImage = [self maskImage:image withMask:mask];
...
- (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 maskedImageRef = CGImageCreateWithMask([image CGImage], mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
// returns new image with mask applied
return maskedImage;
}
Po podaniu kodu dodałem do niego kilka liczb jako komentarze w celach informacyjnych. Nadal masz dwie możliwości. Cała ta sprawa to metoda, którą gdzieś wywołujesz. Nie musisz tworzyć obrazów w środku: zmniejsza to możliwość ponownego użycia metody do zera.
Aby kod działał. Zmień nagłówek metody ( 1. ) na
- (UIImage *)maskImageMyImages {
Następnie zmień nazwę zmiennej w 2. na
UIImage *maskImage = [UIImage imageNamed:@"mask.png"];
Metoda zwróci zamaskowane obrazy, więc będziesz musiał w którymś miejscu wywołać tę metodę. Czy możesz pokazać nam kod, w którym wywołujesz swoją metodę?