我有一组黑白图像,如下所示。如果我没记错的话,可以通过某种方式设置UIImage的混合或遮罩属性,将其与背景UIView混合。
在这种情况下,我想将此图像的颜色更改为红色以表示生命值。 如何以编程方式更改此UIImage的颜色?
我知道图像滤镜的使用,特别是色调偏移,但它们实际上是资源密集型的,而且它们不适用于白色图像,因此我正在寻找另一种解决方案。
我尝试用alpha 0.4覆盖UIView并将其背景颜色设置为红色,这是结果:
这可能在某些情况下有效,但在我的情况下,我希望能够更好地控制我所获得的颜色。
答案 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%:
答案 1 :(得分:0)
在这种情况下,最简单的方法是在图像上方覆盖半透明的红色矩形。由于图像是黑白的,黑色区域将保持黑色。更改红色矩形的高度以指示不同的健康水平。
只需制作一个红色背景颜色的UIView,而不是不透明的,与UIImageView相同的大小。将背景颜色的alpha设置为一半或更小。