Iphone 如何以编程方式为黑白UIImageView着色?

Iphone 如何以编程方式为黑白UIImageView着色?,iphone,objective-c,colors,uiimage,mask,Iphone,Objective C,Colors,Uiimage,Mask,我有一组黑白图像,如下所示。如果我没记错的话,有一种方法可以设置UIImage的混合或遮罩属性,使其与背景UIView混合 在本例中,我想将此图像的颜色更改为红色以表示生命点如何以编程方式更改此UIImage的颜色? 我知道图像过滤器的使用,特别是色调变换,但它们确实是资源密集型的,而且它们不适用于白色图像,所以我正在寻找另一种解决方案 我尝试用alpha 0.4覆盖UIView,并将其背景色设置为红色,结果如下: 这在某些情况下可能有效,但在我的情况下,我希望能够更好地控制我得到的颜色阴影

我有一组黑白图像,如下所示。如果我没记错的话,有一种方法可以设置UIImage的混合或遮罩属性,使其与背景UIView混合

在本例中,我想将此图像的颜色更改为红色以表示生命点如何以编程方式更改此UIImage的颜色?

我知道图像过滤器的使用,特别是色调变换,但它们确实是资源密集型的,而且它们不适用于白色图像,所以我正在寻找另一种解决方案

我尝试用alpha 0.4覆盖UIView,并将其背景色设置为红色,结果如下:


这在某些情况下可能有效,但在我的情况下,我希望能够更好地控制我得到的颜色阴影。

您可以在此图像基础上绘制新图像。下面的代码将把图像中的白色与您提供的背景色混合。百分比是一个0-1.0的浮点值,用于控制从底部开始的图像中有多少与所选颜色混合,因此可以获得类似心脏填充红色以表示生命点的结果

-(UIImage*)blendImage:(UIImage*)image withColor:(UIColor*)color fillUpTo:(float)percent
{
    //math got me
    float realPercent = 1.0-percent;

    CGSize size = image.size;
    UIGraphicsBeginImageContext(size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, CGRectMake(0, size.height*realPercent, size.width, size.height*(1-realPercent)));

    //make sure the image is not upside down
    CGContextTranslateCTM(context, 0, image.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);

    //draw image by blending colors
    CGContextSetBlendMode(context, kCGBlendModeMultiply);
    CGContextDrawImage(context, CGRectMake(0, 0, size.width, size.height), image.CGImage);


    UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resultImage;
}
结果为0.3%:


在这种情况下,最简单的方法是在图像上方覆盖一个半透明的红色矩形。因为图像是黑白的,所以黑色区域将保持黑色。更改红色矩形的高度以指示不同的健康水平


只需将UIView设置为红色背景色,而不是不透明,大小与UIImageView相同。将背景色的alpha值设置为一半或更少。

我尝试过这个方法,这个想法听起来非常好,但结果为黑色区域添加了颜色。我已经添加了一个结果的示例图像。