簡體   English   中英

如何以編程方式為黑/白UIImageView着色?

[英]How can I colorize a black/white UIImageView programmatically?

我有一組黑白圖像,如下所示。 如果我沒記錯的話,可以通過某種方式設置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設置為一半或更小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM