Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS UIImage如何以编程方式将黑色转换为透明?_Ios_Objective C_Colors_Uiimage_Transparency - Fatal编程技术网

iOS UIImage如何以编程方式将黑色转换为透明?

iOS UIImage如何以编程方式将黑色转换为透明?,ios,objective-c,colors,uiimage,transparency,Ios,Objective C,Colors,Uiimage,Transparency,我有一个图标悬停在一个按钮上。图标是黑色和白色的,我想用编程的方式“剪切”黑色区域 如何以编程方式将图标的黑色区域转换为透明区域? 您可以使用核心图像过滤器,尤其是过滤器 有关使用CIFilters的详细说明,请参阅和 编辑:此过滤器采用黑色像素并使其完全透明,并用不透明替换白色像素,用部分透明替换灰色像素,等等 -(void)setImage:(UIImage *)image_ { UIImage *entryImage = image_; CIContext *conte

我有一个图标悬停在一个按钮上。图标是黑色和白色的,我想用编程的方式“剪切”黑色区域

如何以编程方式将图标的黑色区域转换为透明区域?


您可以使用核心图像过滤器,尤其是过滤器

有关使用CIFilters的详细说明,请参阅和

编辑:此过滤器采用黑色像素并使其完全透明,并用不透明替换白色像素,用部分透明替换灰色像素,等等

-(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];
}

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

准备好蒙版图像后,实现蒙版图像的功能

//掩蔽Thumnail图像

+(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;

}

结束一个问题是多么愚蠢的理由。。。这里不允许任何人学习。