本教程将此方法与两个参数一起使用:image
和maskImage
,在调用该方法时必须设置这些参数。假设方法在同一个类中,并且图片在您的包中,则示例调用可能看起来像这样:
注意-令人惊讶的是,图像甚至不必具有相同的大小。
...
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;
}
提供代码后,我在其中添加了一些数字作为注释,以供参考。您仍然有两个选择。整个过程是一个方法,您正在某个地方调用它。您无需在其中创建图像:这会将方法的可重用性降低为零。
使您的代码正常工作。将方法标题(1.)更改为
- (UIImage *)maskImageMyImages {
然后在2中将变量的名称更改为
UIImage *maskImage = [UIImage imageNamed:@"mask.png"];
该方法将返回蒙版图像,因此您必须在某个位置调用此方法。您能告诉我们您调用方法的代码吗?