- (UIImage *)maskFrame:(UIImage *)firstImage withFrame:(UIImage *)maskImage { CGImageRef image = firstImage.CGImage; CGImageRef maskImageRef = maskImage.CGImage; CGRect bounds = CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image)); // clip 2 pixels hor and vert UIGraphicsBeginImageContext(bounds.size); // rotate context CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0, bounds.size.height); CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0); // draw first image CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image)), image); // draw mask // CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, CGImageGetWidth(maskedImage), CGImageGetHeight(maskedImage)), maskedImage); const float myMaskingColors[6] = {0, 0, 0, 0, 0, 0}; CGImageRef myColorMaskedImage = CGImageCreateWithMaskingColors (maskImageRef, myMaskingColors); CGContextDrawImage (UIGraphicsGetCurrentContext(), CGRectMake(0, 0, CGImageGetWidth(myColorMaskedImage), CGImageGetHeight(myColorMaskedImage)), myColorMaskedImage); //CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, CGImageGetWidth(maskImageRef), CGImageGetHeight(maskImageRef)), maskImageRef); // rotate context back CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0, CGImageGetHeight(image)); CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0); UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return imageCopy; }