美文网首页
UIColor 中提取 RGBA

UIColor 中提取 RGBA

作者: 幕夜丶席 | 来源:发表于2018-06-26 20:01 被阅读62次

    之前遇到一些获取颜色RGB的需求,在这里记录下

    
    UIColor *color = [UIColor redColor];
    // 普通颜色可以通过 这个方法获取的RGBA的值
    // 颜色空间是固定的,对应RGBA
    const CGFloat *cmp = CGColorGetComponents(fColor.CGColor);
    r = cmp[0];
    g = cmp[1];
    b = cmp[2];
    a = cmp[3];
    

    有些颜色是获取不到RGBA的, 比如 [UIColor whiteColor] [UIColor blackColor] [UIColor colorWithWhite: alpha:] 这些方法创建的
    通过 colorWithRed: green: blue: alpha: 创建的肯定能够获取到RGBA, 所以
    可以通过这个方法获取颜色通道数量

    
    unsigned long int fNum = CGColorGetNumberOfComponents(fColor.CGColor);
    if (fNum == 4) {
        // 在调用上面的方法获取RGBA
    }
    
    

    用这个方法可以获取到

    
    + (void)cx_getRGBComponents:(CGFloat [3])cmp forColor:(UIColor *)color {
        CGColorSpaceRef spaceRef = CGColorSpaceCreateDeviceRGB();
        unsigned char resultPixel[4];
        CGContextRef ctx = CGBitmapContextCreate(&resultPixel, 1, 1, 8, 4, spaceRef, kCGImageAlphaNoneSkipLast);
        CGContextSetFillColorWithColor(ctx, [color CGColor]);
        CGContextFillRect(ctx, CGRectMake(0, 0, 1, 1));
        CGContextRelease(ctx);
        CGColorSpaceRelease(spaceRef);
        
        for (int i = 0; i < 3; i++) {
            cmp[i] = resultPixel[i] / 255.0;
        }
    }
    
    

    如何使用

    
    CGFloat cmp[3];
    [self cx_getRGBComponents:cmp forColor:[UIColor whiteColor]];
    r = cmp[0];
    g = cmp[1];
    b = cmp[2];
    
    

    相关文章

      网友评论

          本文标题:UIColor 中提取 RGBA

          本文链接:https://www.haomeiwen.com/subject/gmomyftx.html