问题创建和屏蔽纯色CGImage

时间:2011-08-17 13:37:17

标签: iphone objective-c ios uiimage core-graphics

iPhone应用中,我有一组黑白图像。我需要一个功能,可以将图像的白色区域更改为透明,将黑色更改为任意颜色。

我正在尝试创建纯色(黑色或白色)CGImageRef,然后使用原始图像进行遮罩。它几乎可以工作,但应该透明的区域大约是1%透明。

这是我的功能。它接受boolean来确定实体color应该是黑色还是白色。

- (UIImage*) imageWithMask:(UIImage *) maskImage andIsWhite:(BOOL) isWhite {
    CGImageRef maskImageRef = [maskImage CGImage];

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL, maskImage.size.width, maskImage.size.width, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);

    if (isWhite) {
        CGContextSetRGBFillColor(context, (CGFloat)1.0, (CGFloat)1.0, (CGFloat)1.0, (CGFloat)1.0 );
    } else {
        CGContextSetRGBFillColor(context, (CGFloat)0.0, (CGFloat)0.0, (CGFloat)0.0, (CGFloat)1.0 );
    }

    CGContextAddRect(context, CGRectMake(0, 0, maskImage.size.width, maskImage.size.height));
    CGContextFillRect(context, CGRectMake(0, 0, maskImage.size.width, maskImage.size.height));

    CGImageRef solidImage = CGBitmapContextCreateImage(context);

    CGColorSpaceRelease(colorSpace);
    CGContextRelease(context);

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskImageRef),
                                        CGImageGetHeight(maskImageRef),
                                        CGImageGetBitsPerComponent(maskImageRef),
                                        CGImageGetBitsPerPixel(maskImageRef),
                                        CGImageGetBytesPerRow(maskImageRef),
                                        CGImageGetDataProvider(maskImageRef), NULL, false);

    CGImageRef masked = CGImageCreateWithMask(solidImage, mask);

    UIImage *maskedUIImage = [UIImage imageWithCGImage:masked];
    CGImageRelease(masked);
    return maskedUIImage;
}

任何建议都表示赞赏。

0 个答案:

没有答案