遇到一些获取颜色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)dc_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 dc_getRGBComponents:cmp forColor:[UIColor whiteColor]];
r = cmp[0];
g = cmp[1];
b = cmp[2];