UIColor 中提取 RGBA

之前遇到一些获取颜色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];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在曹雪芹文学巨著红楼梦中有两个和贾政密切相关的女人 ,那就是他的一妻一妾了——王夫人和赵姨娘 要说贾政的妻子王夫人...
    霞_e3d5阅读 1,268评论 15 38
  • http://note.youdao.com/noteshare?id=8c5ac973333ef745cdc60...
    y杨筱莉l阅读 152评论 0 0