CGImageCreateWithMask works great but the masked out area is black in my resulting image, how can I set it to be white?

后端 未结 4 1017
别跟我提以往
别跟我提以往 2021-01-03 04:06

I\'ve masked out my image thusly:

    CGImageRef maskRef = [[UIImage imageNamed:@\"testMask2.png\"] CGImage];

CGImageRef mask = CGImageMaskCreate(CGImageGet         


        
4条回答
  •  Happy的楠姐
    2021-01-03 04:42

    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 ...

提交回复
热议问题