@synthesize croppedImage; - (void)viewDidLoad { [super viewDidLoad]; NSString *inputPath = [[NSBundle mainBundle] pathForResource:@"images" ofType:@"png"]; NSString *maskPath = [[NSBundle mainBundle] pathForResource:@"Unknown" ofType:@"png"]; UIImage *inputImage = [[UIImage alloc] initWithContentsOfFile:inputPath]; UIImage *mask = [[UIImage alloc] initWithContentsOfFile:maskPath]; UIImage *cutOut = [self maskImage:inputImage withMask:mask]; croppedImage.image = cutOut; } - (UIImage*) maskImage:(UIImage *) image withMask:(UIImage *) mask { CGImageRef imageReference = image.CGImage; CGImageRef maskReference = mask.CGImage; CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskReference), CGImageGetHeight(maskReference), CGImageGetBitsPerComponent(maskReference), CGImageGetBitsPerPixel(maskReference), CGImageGetBytesPerRow(maskReference), CGImageGetDataProvider(maskReference), NULL, // Decode is null YES // Should interpolate ); CGImageRef maskedReference = CGImageCreateWithMask(imageReference, imageMask); CGImageRelease(imageMask); UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference]; CGImageRelease(maskedReference); return maskedImage; }