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

时间:2013-12-19 04:01:03

标签: iphone objective-c colors uiimage mask

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

在这种情况下,我想将此图像的颜色更改为红色以表示生命值。 如何以编程方式更改此UIImage的颜色?

我知道图像滤镜的使用,特别是色调偏移,但它们实际上是资源密集型的,而且它们不适用于白色图像,因此我正在寻找另一种解决方案。

Example icon

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

enter image description here 这可能在某些情况下有效,但在我的情况下,我希望能够更好地控制我所获得的颜色。

2 个答案:

答案 0 :(得分:7)

您可以在此图片上绘制新图像。以下代码会将图像中的白色与您提供的背景颜色混合在一起。百分比是一个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%:

enter image description here

答案 1 :(得分:0)

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

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