将颜色从白色变为透明 - UIImage

3
我有一张带有白线的图片。我需要将图片中所有白色颜色改为透明。我在 obj-c 中找到了解决方案,但它不起作用。图片中还有黄色和红色颜色。
我的代码:
   let rawImageRef: CGImageRef = image.CGImage!

    let colorMasking: [CGFloat] = [222, 255, 222, 255, 222, 255]
    UIGraphicsBeginImageContext(image.size);
    let maskedImageRef=CGImageCreateWithMaskingColors(rawImageRef, colorMasking);
    CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0.0, image.size.height);
    CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0);
    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width, image.size.height), maskedImageRef);
    let result = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    

    self.controlView.image = result!

但我什么也没看到 - 图像很清晰(可能)。我做错了什么,请问?谢谢。
2个回答

2

修复

在创建rawImageReg之前添加代码:

image = UIImage(data: UIImageJPEGRepresentation(image, 1.0)!)!

谢谢你


0

在UIKit和Cocoa中,颜色都是用0到1的浮点数来指定的,而不是0到255的整数。下面的代码应该可以解决你的问题:

let colorMasking : [CGFloat] = [222.0/255.0, 255.0/255.0, ...]

看起来使用CGImageCreateWithMaskingColors时,掩膜颜色必须在与源图像相同的“空间”中指定,因此根据源图像的不同,您可能需要使用整数或浮点数。 - David Berry
谢谢您的回答。我尝试了您的代码,但结果仍然相同。 - ankmara
maskedImageRef 为空,我不理解。 - ankmara
如果maskedImageRef为nil,则说明组件数组无效。您尝试过使用浮点数而不是整数吗? - David Berry
是的,222.0,255.0,222.0,255.0,222.0,255.0,我尝试了你的解决方案和int。什么都没有。我不知道出了什么问题 :) - ankmara

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