iOS开发:UIImage赋颜色-----给image赋16进制颜色值

本文介绍如何解决从网络获取的透明UIImage显示问题,通过将16进制颜色值转换为UIColor,并将该颜色应用到UIImage上,实现对UIImage的颜色定制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UIImage赋颜色:给image赋16进制颜色值

本讲:

    在今天的项目中遇到了一个问题:从网络段解析的数据中得到的image是透明的(白色的),看不到它,研究好久,发现数据解析里有一个16进制的颜色值。需要把这个颜色值赋给image

问题:

<UIKit/UIKit.h>中并没有现成的直接给image赋值的方法。

办法:

1.写一个类目,把16进制的颜色值转化成10进制颜色值;
2.写一个类目,给image赋颜色值;

代码

颜色:16进制——>10进制
+ (UIColor *)RGBFromHexColor:(NSString *)hexadecimalColor
{
    NSString *colorString = [[hexadecimalColor stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];

    if ([colorString length] < 6) {
        return [UIColor clearColor];
    }

    //16进制,以“0X”开头
    if ([colorString hasPrefix:@"0X"])
        colorString = [colorString substringFromIndex:2];
    //16进制,以“#”开头
    if ([colorString hasPrefix:@"#"])
        colorString = [colorString substringFromIndex:1];

    if ([colorString length] != 6)
        return [UIColor clearColor];
    NSRange range;
     //前两个是r
    range.location = 0;
    range.length = 2;
    NSString *rString = [colorString substringWithRange:range];
    //中间两个是g
    range.location = 2;
    NSString *gString = [colorString substringWithRange:range];
    //最后两个是b
    range.location = 4;
    NSString *bString = [colorString substringWithRange:range];
    unsigned int r, g, b;
    //转码:
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];
    return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f];
}
给image赋颜色
- (UIImage *)imageWithColor:(UIColor *)color{

    UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(contextRef, 0, self.size.height);
    CGContextScaleCTM(contextRef, 1.0, -1.0);
    CGContextSetBlendMode(contextRef, kCGBlendModeNormal);
    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
    CGContextClipToMask(contextRef, rect, self.CGImage);
    [color setFill];
    CGContextFillRect(contextRef, rect);
    UIImage*newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值