问题创建和遮蔽纯色CGImage
在iPhone应用程序中,我有一组黑白图像。 我需要一个函数,将图像的白色区域变为透明,将黑色变为任意颜色。
我试图创建一个纯色(黑色或白色)CGImageRef,然后用我的原始图像进行遮罩。 它几乎在工作,但应该透明的区域大约1%透明。
这是我的功能。 它接受一个布尔值来确定纯色是黑色还是白色。
- (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; }
任何建议表示赞赏。
链接地址: http://www.djcxy.com/p/46523.html