I\'ve masked out my image thusly:
CGImageRef maskRef = [[UIImage imageNamed:@\"testMask2.png\"] CGImage];
CGImageRef mask = CGImageMaskCreate(CGImageGet
I was struggling with the same issue. The solution is pretty simple: It is the best to create graphic context for masking this way:
UIGraphicsBeginImageContextWithOptions(maskFrame.size, NO, 0.0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect ff = CGRectMake(0, 0, maskFrame.size.width, mask.size.height);
CGContextClipToMask(ctx, ff, mask.CGImage);
....
Make sure, the second parameter in UIGraphicsBeginImageContextWithOptions is set to NO (which means none-opaque context). Another benefit is that this creation function automatically scales context to retina displays.
The image is supposed to be transparent where it's "masked out"; the colour you see will depend on what background you're drawing it on.
(I don't remember if there's a requirement that the source image has an alpha channel.)
It may be worth making sure that imageView.opaque = NO
.
Try this:
imageView.opaque = NO;
imageView.backgroundColor = [UIColor clearColor];
Also, the image used to mask should be black and white (not transparent).
If you are masking JPEG image which does not have alpha channel this will happen (black background instead of transparent).
So you need to do something like this before masking:
CGImageRef imageNoAlpha = [UIImage imageNamed:@"noAlphaImage.jpg"].CGImage;
CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
CGFloat width = CGImageGetWidth(imageNoAlpha);
CGFloat height = CGImageGetHeight(imageNoAlpha);
CGContextRef ctxWithAlpha = CGBitmapContextCreate(nil, width, height, 8, 4*width, cs, kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(ctxWithAlpha, CGRectMake(0, 0, width, height), imageNoAlpha);
CGImageRef imageWithAlpha = CGBitmapContextCreateImage(ctxWithAlpha);
CGImageRef masked = CGImageCreateWithMask(imageWithAlpha, mask);
...
Be sure to release created images, context and colorspace ...