iOS UIImage如何在程序中将黑色转换为透明?

7
我有一个图标,它悬停在一个按钮上。这个图标是黑白的,我想通过编程“剪切”黑色区域。
请问如何通过编程将图标的黑色区域转换为透明?
请见下方图片: enter image description here

4
关闭问题的理由太愚蠢了……这里不允许任何人学习。 - Albert Renshaw
2个回答

12
您可以使用Core Image滤镜,特别是过滤器CIMaskToAlpha
有关使用CIFilters的详细说明,请参阅Apple的Core Image编程指南RayWenderlich教程
编辑:此滤镜将黑色像素完全透明化,并用不同的透明度替换白色、灰色等像素。
-(void)setImage:(UIImage *)image_
{

    UIImage *entryImage  = image_;
    CIContext *context = [CIContext contextWithOptions:nil];

    CIImage *image = [CIImage imageWithCGImage:[entryImage CGImage]];
    CIFilter *filter = [CIFilter filterWithName:@"CIMaskToAlpha"];
    [filter setDefaults];
    [filter setValue:image forKey:kCIInputImageKey];
    //    CIImage *result = [filter valueForKey:kCIOutputImageKey];
    CIImage *result = [filter outputImage];

    CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];

    UIImage *newImage = [UIImage imageWithCGImage:cgImage scale:[entryImage scale] orientation:UIImageOrientationUp];
    CGImageRelease(cgImage);
    [super setImage:newImage];
}

1

该图像将是原始图像大小的透明正方形,完全黑色区域应被遮罩成白色。当我们将这个遮罩图像覆盖在实际的正方形图像上时,输出将是一个期望的图像。

一旦您准备好了遮罩图像,就实现遮罩图像的功能。

//遮罩缩略图像

+(UIImage*) maskImage:(UIImage *)thumbImage 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 masked = CGImageCreateWithMask([thumbImage CGImage], mask);
    CGImageRelease(mask);
    UIImage *maskedImage = [UIImage imageWithCGImage:masked];
    CGImageRelease(masked);
    return maskedImage;

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接