遇到一些获取颜色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];
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223941.html原文链接:https://javaforall.net
