2013-12-19 26 views
4

我有一組黑白圖像,如下所示。如果我沒有記錯,有一些方法可以設置UIImage的混合或遮罩屬性,以將其與背景UIView混合。如何以編程方式着色黑/白UIImageView?

在這種情況下,我想將此圖像的顏色更改爲紅色以表示生命值。 如何以編程方式更改此UIImage的顏色?

我知道使用圖像過濾器,特別是色調轉換,但它們確實是資源密集型的,再加上它們不適用於白色圖像,所以我正在尋找另一種解決方案。

Example icon

我試圖覆蓋阿爾法0.4一個UIView並設置它的背景顏色爲紅色,這裏的結果:

enter image description here 這可能在某些情況下工作,但對我來說,我想對我得到的顏色陰影有更多的控制權。

回答

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

0

在這種情況下,最簡單的方法是將疊加半透明的紅色矩形圖像上方。由於圖像是黑色和白色,黑色區域將保持黑色。更改紅色矩形的高度以指示不同的健康級別。

只需製作一個帶有紅色背景顏色的UIView,而不是不透明的,大小與UIImageView相同。將背景顏色的Alpha設置爲一半或更少。

+0

我試過這個,這個想法聽起來非常好,但結果增加了黑色區域的顏色。我添加了結果的示例圖像。 –

相關問題