UIImage masking problems iOS 7

前端 未结 3 1434
暗喜
暗喜 2021-02-06 19:23

I have heavily borrowed (standard) code which applies a grayscale UIImage mask to a UIImage.

- (void) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {         


        
3条回答
  •  一个人的身影
    2021-02-06 19:39

    I found this issue on my app too and I solve it by following code.

    - (UIImage*)image:(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([handledImage CGImage], mask);
        CGImageRelease(mask);
    
        // Under iOS 7, UIImage with mask no longer applied mask when saving it.
        // We draw the image to context and obtain image from context to get the image applied mask
        CGContextRef context = CGBitmapContextCreate(nil,
                                                     CGImageGetWidth(maskedImageRef),
                                                     CGImageGetHeight(maskedImageRef),
                                                     CGImageGetBitsPerComponent(maskedImageRef),
                                                     CGImageGetBytesPerRow(maskedImageRef),
                                                     CGImageGetColorSpace(maskedImageRef),
                                                     CGImageGetBitmapInfo(maskedImageRef));
    
        CGRect imageRect = CGRectMake(0, 0, CGImageGetWidth(maskedImageRef), CGImageGetHeight(maskedImageRef));
        CGContextDrawImage(context, imageRect, maskedImageRef);
        CGImageRef imageRef = CGBitmapContextCreateImage(context);
        UIImage *maskedImage = [UIImage imageWithCGImage:imageRef];
    
        CFRelease(imageRef);
        CGContextRelease(context);
        CGImageRelease(maskedImageRef);
    
        return maskedImage;
    }
    

提交回复
热议问题