Das Tutorial verwendet diese Methode mit zwei Parametern: image
und maskImage
diese müssen Sie beim Aufrufen der Methode festlegen. Ein Beispielaufruf könnte folgendermaßen aussehen, vorausgesetzt, die Methode befindet sich in derselben Klasse und die Bilder befinden sich in Ihrem Bundle:
Hinweis - erstaunlicherweise müssen die Bilder nicht einmal die gleiche Größe haben.
...
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;
}
Nachdem Sie Ihren Code angegeben haben, habe ich einige Nummern als Kommentare als Referenz hinzugefügt. Sie haben noch zwei Möglichkeiten. Diese ganze Sache ist eine Methode, die Sie irgendwo aufrufen. Sie müssen die darin enthaltenen Bilder nicht erstellen. Dadurch wird die Wiederverwendbarkeit der Methode auf Null reduziert.
Damit Ihr Code funktioniert. Ändern Sie den Methodenkopf ( 1. ) in
- (UIImage *)maskImageMyImages {
Ändern Sie dann den Namen der Variablen in 2. in
UIImage *maskImage = [UIImage imageNamed:@"mask.png"];
Die Methode gibt Ihre maskierten Bilder zurück, sodass Sie diese Methode an einer bestimmten Stelle aufrufen müssen. Können Sie uns den Code zeigen, in dem Sie Ihre Methode aufrufen?