CGImageCreateWithMask工作得很好,但在我生成的图像中,蒙面区域是黑色的,如何将其设置为白色?

Shi*_*zam 5 iphone objective-c quartz-graphics

我这样掩饰了我的形象:

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

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                    CGImageGetHeight(maskRef),
                                    CGImageGetBitsPerComponent(maskRef),
                                    CGImageGetBitsPerPixel(maskRef),
                                    CGImageGetBytesPerRow(maskRef),
                                    CGImageGetDataProvider(maskRef), nil, YES);

UIImage *image = [UIImage imageWithContentsOfFile:path];

CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);

imageView.image = [UIImage imageWithCGImage:masked];
Run Code Online (Sandbox Code Playgroud)

并且效果很好,但是生成的图像有黑色,它被掩盖了,我怎么能将它设置为白色掩盖了?

Mat*_*mar 9

如果您正在屏蔽没有Alpha通道的JPEG图像,则会发生这种情况(黑色背景而不是透明).

所以你需要在屏蔽之前做这样的事情:

    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);
Run Code Online (Sandbox Code Playgroud)

...

一定要释放创建的图像,上下文和颜色空间......